Comment obtenir l'heure et la date actuelles sur Android

1109

Comment puis-je obtenir l'heure et la date actuelles dans une application Android?

M7M
la source
3
43 réponses! Alors que beaucoup d'entre eux étaient bons lorsqu'ils ont été écrits, la bonne réponse à utiliser en 2018 est ici .
Ole VV

Réponses:

1310

Vous pouvez utiliser:

import java.util.Calendar

Date currentTime = Calendar.getInstance().getTime();

Calendrier contient de nombreuses constantes pour tout ce dont vous avez besoin.

Edit:
Vérifier la documentation de la classe Calendar

miken32
la source
14
+1 Cela a été très utile. Étant nouveau, c'est tous ces petits morceaux dont nous avons besoin ... J'utilise Calendar pour obtenir la date julienne. Beaucoup plus facile que d'obtenir des millisecondes et de déterminer si la valeur est égale à aujourd'hui;)
Bill Mote
9
Mais d'où cela tire-t-il la date et l'heure? l'appareil Android se configure-t-il?
Kyle Clegg
12
@Kyle Oui, il est basé sur les paramètres / fuseau horaire de l'appareil. Citation du document : "La méthode getInstance de Calendar renvoie un calendrier dont les paramètres régionaux sont basés sur les paramètres système et dont les champs d'heure ont été initialisés avec la date et l'heure actuelles" - (au-dessus de la première ligne de code d'échantillonnage dans la documentation de la classe).
3
+1 cette solution a une précision en millisecondes, exactement ce dont j'avais besoin.
Igor Zelaya
42
Comme le dit @adamdport, cela ne répond pas réellement à la question ... Calendar.getInstance().getTime()ou Calendar.getInstance().getTimeInMillis()fonctionnera.
akousmata
487

Vous pouvez ( mais ne devriez plus - voir ci-dessous!) Utiliser android.text.format.Time :

Time now = new Time();
now.setToNow();

De la référence liée ci-dessus:

La classe Time remplace plus rapidement les classes java.util.Calendar et java.util.GregorianCalendar. Une instance de la classe Time représente un instant dans le temps, spécifié avec une seconde précision.


REMARQUE 1: Cela fait plusieurs années que j'ai écrit cette réponse, et il s'agit d'une ancienne classe spécifique à Android et maintenant obsolète. Google indique désormais que "[t] sa classe a un certain nombre de problèmes et il est recommandé d'utiliser GregorianCalendar à la place".


REMARQUE 2: même si la Timeclasse a une toMillis(ignoreDaylightSavings)méthode, il s'agit simplement d'une commodité à passer aux méthodes qui attendent du temps en millisecondes. La valeur de temps n'est précise qu'à une seconde ; la partie en millisecondes est toujours 000. Si vous êtes en boucle

Time time = new Time();   time.setToNow();
Log.d("TIME TEST", Long.toString(time.toMillis(false)));
... do something that takes more than one millisecond, but less than one second ...

La séquence résultante répétera la même valeur, par exemple 1410543204000, jusqu'à ce que la seconde suivante ait commencé, moment auquel la 1410543205000répétition commencera.

Thomas Padron-McCarthy
la source
2
@InsanityOnABun et Muhammad Babar. Non non Non. Les documents disent "spécifié avec une deuxième précision" Même le test le plus simple (obtenir l'heure actuelle dans une boucle, toMillis et enregistrer / imprimer le résultat) vous aurait montré que le temps résultant a 000 en millisecondes!
ToolmakerSteve
3
@IgorZelaya Si vous voulez une précision en millisecondes, vous faites probablement un chronométrage d'intervalle plutôt qu'une heure de la journée. Les documents Android recommandent le SystemClock.uptimeMillis()chronométrage d'intervalle. Étant donné que c'est ce que la plupart des fonctions intégrées utilisent, il y a une forte motivation pour qu'il soit bien implémenté sur tous les appareils. Voir la discussion dans SystemClock ... Si vous voulez corréler cela avec l'heure de la journée, dans l'application onResume, lisez ceci et Time / setToNow / toMillis. Rappelez-vous la différence entre ceux-ci.
ToolmakerSteve
N'utilisez pas la classe Time . Il va être supprimé à l'avenir et présente de nombreux problèmes.
Sandy Chapman
1
> Cette classe est obsolète au niveau de l'API 22. Utilisez plutôt GregorianCalendar. Voir ici
Neo
En fait, il a GregorianCalendarété supplanté il y a des années en Java et plus tard en Android par les classes java.time , en particulier ZonedDateTime. Pour les versions antérieures d'Android, consultez les projets ThreeTen-Backport et ThreeTenABP .
Basil Bourque
367

Si vous souhaitez obtenir la date et l'heure dans un modèle spécifique, vous pouvez utiliser ce qui suit:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());

Ou,

Date :

String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());

Temps:

String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());
Miciurash
la source
Cela donnera l'heure en UTC, devrait s'adapter aux fuseaux horaires.
Andras Balázs Lajtha
10
Attention, SimpleDateFormat peut être problématique si les performances sont un problème. Dans mon application, j'avais une vue personnalisée qui avait environ 20 étiquettes HH: MM qui représentaient des heures spécifiques (de longs entiers contenant des millisecondes) et un nombre égal de ressources pouvant être dessinées. Les premiers tests ont montré que l'interaction n'était pas aussi fluide que je le souhaitais. Lorsque j'ai profilé onDraw (), j'ai constaté que les appels SimpleTimeFormatter prenaient 80% du temps. En fait, je lis cette page dans le cadre d'une recherche d'un formateur plus efficace et pour en savoir plus sur les calendriers, etc.
William T. Mallard
3
Oui, mais plus. Je ne savais pas les frais généraux impliqués et j'avais supposé que c'était à peu près un POJO.
William T. Mallard du
32
En bref:String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Pratik Butani
4
vous pouvez insérer sdf.setTimeZone(TimeZone.getDefault())au milieu
Harvey
231

Pour ceux qui préfèrent plutôt un format personnalisé, vous pouvez utiliser:

DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());

Alors que vous pouvez avoir des modèles DateFormat tels que:

"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
ANemati
la source
126

En fait, il est plus sûr de définir le fuseau horaire actuel sur l'appareil avec Time.getCurrentTimezone(), sinon vous obtiendrez l'heure actuelle en UTC.

Time today = new Time(Time.getCurrentTimezone());
today.setToNow();

Ensuite, vous pouvez obtenir tous les champs de date souhaités, comme par exemple:

textViewDay.setText(today.monthDay + "");             // Day of the month (1-31)
textViewMonth.setText(today.month + "");              // Month (0-11)
textViewYear.setText(today.year + "");                // Year 
textViewTime.setText(today.format("%k:%M:%S"));  // Current time

Voir la classe android.text.format.Time pour tous les détails.

MISE À JOUR

Comme beaucoup de gens le soulignent, Google dit que cette classe a un certain nombre de problèmes et n'est plus censée être utilisée:

Cette classe a un certain nombre de problèmes et il est recommandé d'utiliser GregorianCalendar à la place.

Problèmes connus:

Pour des raisons historiques, lors de l'exécution des calculs de temps, toute l'arithmétique est actuellement effectuée à l'aide d'entiers 32 bits. Cela limite la plage de temps fiable représentable de 1902 à 2037.Voir l'article wikipedia sur le problème de l'année 2038 pour plus de détails. Ne comptez pas sur ce comportement; cela pourrait changer à l'avenir. L'appel de switchTimezone (String) à une date qui ne peut pas exister, telle qu'une heure de mur qui a été ignorée en raison d'une transition DST, entraînera une date en 1969 (c'est-à-dire -1, ou 1 seconde avant le 1er janvier 1970 UTC). Une grande partie du formatage / de l'analyse suppose du texte ASCII et ne convient donc pas à une utilisation avec des scripts non ASCII.

Kaneda
la source
L'heure doit être importée de quel paquet?
ManishSB
Cette classe est déconseillée au niveau de l'API 22. Nous pouvons utiliser GregorianCalendar à la place.
Choletski
78

Pour la date et l'heure actuelles, utilisez:

String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

Quelles sorties:

Feb 27, 2012 5:41:23 PM
Kirit
la source
J'ai obtenu la date, le jour et l'heure actuels du système mais l'heure ne change pas. Je veux augmenter le temps secondes par secondes. Comment puis-je faire?
Bhavesh Hirpara
2
C'est la manière recommandée de le faire, selon l'API Android: developer.android.com/reference/java/text/… Merci!
M Granja
58

Essayez de cette façon Tous les formats sont indiqués ci-dessous pour obtenir le format de la date et de l'heure.

    Calendar c = Calendar.getInstance();
    SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aa");
    String datetime = dateformat.format(c.getTime());
    System.out.println(datetime);

première

seconde troisième

Amitsharma
la source
53

tl; dr

Instant.now()  // Current moment in UTC.

…ou…

ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )  // In a particular time zone

Détails

Les autres réponses, bien que correctes, sont obsolètes. Les anciennes classes de date-heure se sont avérées mal conçues, déroutantes et gênantes.

java.time

Ces anciennes classes ont été remplacées par le framework java.time .

Ces nouvelles classes sont inspirées du projet Joda-Time , qui a connu un grand succès , défini par JSR 310 et étendu par le projet ThreeTen-Extra .

Voir le didacticiel Oracle .

Instant

An Instantest un moment sur la timeline en UTC avec une résolution allant jusqu'à nanosecondes .

 Instant instant = Instant.now(); // Current moment in UTC.

Fuseau horaire

Appliquez un fuseau horaire ( ZoneId) pour obtenir un ZonedDateTime. Si vous omettez le fuseau horaire, le fuseau horaire par défaut actuel de votre machine virtuelle Java est implicitement appliqué. Mieux vaut spécifier explicitement le fuseau horaire souhaité / attendu.

Utilisez les noms de fuseau horaire approprié dans le format de continent/regiontels que America/Montreal, Europe/Brusselsou Asia/Kolkata. N'utilisez jamais les abréviations de 3 à 4 lettres telles que ESTou ISTcar elles ne sont ni standardisées ni uniques.

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Tableau des types de date-heure en Java, à la fois modernes et hérités

Génération de chaînes

Vous pouvez facilement générer une Stringreprésentation textuelle de la valeur date-heure. Vous pouvez choisir un format standard, votre propre format personnalisé ou un format localisé automatiquement.

ISO 8601

Vous pouvez appeler les toStringméthodes pour mettre le texte en forme à l'aide de la norme ISO 8601 commune et sensée .

String output = instant.toString();

2016-03-23T03: 09: 01.613Z

Notez que pour ZonedDateTime, la toStringméthode étend la norme ISO 8601 en ajoutant le nom du fuseau horaire entre crochets. Informations extrêmement utiles et importantes, mais pas standard.

2016-03-22T20: 09: 01.613-08: 00 [Amérique / Los_Angeles]

Format personnalisé

Ou spécifiez votre propre modèle de mise en forme avec la DateTimeFormatterclasse.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );

Spécifiez un Localepour une langue humaine (anglais, français , etc.) à utiliser pour traduire le nom du jour / mois et également pour définir les normes culturelles telles que l'ordre de l'année, du mois et de la date. Notez que cela Localen'a rien à voir avec le fuseau horaire.

formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );

Localisation

Mieux encore, laissez java.time faire le travail de localisation automatiquement.

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) );  // Or Locale.CANADA_FRENCH and so on.

À propos de java.time

Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que java.util.Date, Calendar, et SimpleDateFormat.

Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers java.time classes .

Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Vous pouvez échanger des objets java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de java.sql.*cours.

Où obtenir les classes java.time?

  • Java SE 8 , Java SE 9 , Java SE 10 et versions ultérieures
    • Intégré.
    • Une partie de l'API Java standard avec une implémentation groupée.
    • Java 9 ajoute quelques fonctionnalités et correctifs mineurs.
  • Java SE 6 et Java SE 7
    • Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Versions ultérieures des implémentations de bundles Android des classes java.time.
    • Pour les versions antérieures d'Android (<26), le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .

Tableau répertoriant quelle implémentation de la technologie * java.time * utiliser sur quelles versions de Java et Android.

Basil Bourque
la source
2
@ giraffe.guru Relisez ma réponse. Vous avez raté la troisième balle. Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport et adaptée à Android dans ThreeTenABP .
Basil Bourque
Instant.now()et ZonedDateTime.now()est requis API 26
Ryde
2
@Ryde Comme je l'ai dit à giraffe.guru, relisez ma réponse. Recherchez la troisième puce mentionnant "Android".
Basil Bourque
Je pense que vous avez raison: votre nouvelle table d'édition java.time transmet le message plus directement et plus facilement qu'une liste à puces. Si c'était moi, je pense que je compliquerais les choses un peu plus loin et mettrais une coche entre crochets (ou quelque chose de similaire) sous ThreeTenBackport / Java 8+ et également sous ThreeTenABP / Android 26+ car ces combinaisons fonctionnent, seulement il n'y a pas 'habituellement aucun intérêt à les utiliser. Des applications Android en cours de développement qui utilisent ThreeTenABP et ciblent une gamme de niveaux d'API Android à la fois au-dessus et en dessous du niveau 26. Il me semble que les développeurs choisissent bien dans ces cas.
Ole VV
1
@ OleV.V. Merci d'avoir suggéré une coche secondaire dans le tableau graphique. Je l'ai utilisé dans des versions ultérieures du tableau. Très amélioré.
Basil Bourque
52

Pour l'heure actuelle, vous pouvez utiliser System.currentTimeMillis()ce qui est standard en Java. Ensuite, vous pouvez l'utiliser pour créer une date

Date currentDate = new Date(System.currentTimeMillis());

Et comme mentionné par d'autres pour créer un temps

Time currentTime = new Time();
currentTime.setToNow();
JosephL
la source
13
Pas besoin de System.currentTimeMillis(); fait simplement new Date() la même chose .
Jonik
@Jonik Cannot resolve constructor Date()dans Android, le SDK Android utilise un mélange de Java 6 et 7.
surfer190
1
Je vous remercie. Date currentDate = new Date(System.currentTimeMillis());est correct
mghhgm
@mghhgm Non, new Date(System.currentTimeMillis())en faux : (a) c'est redondant, car c'est exactement la même chose que new Date(). (b) La java.util.Dateclasse gênante est désormais supplantée à java.time.Instantpartir de Java 8 et versions ultérieures. Rétroporté vers Java 6 et 7 dans le projet ThreeTen-Backport et vers une version antérieure d'Android (<26) dans ThreeTenABP .
Basil Bourque
37

Vous pouvez utiliser le code:

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());

Production:

2014-11-11 00:47:55

Vous disposez également d'options de mise en forme supplémentaires à SimpleDateFormatpartir d' ici .

Himanshu Aggarwal
la source
Pour info, les anciennes classes de date-heure gênantes telles que java.util.Date, java.util.Calendaret java.text.SimpleDateFormatsont désormais héritées , supplantées par les classes java.time intégrées à Java 8 et versions ultérieures. Voir Tutoriel par Oracle .
Basil Bourque
32

Facile, vous pouvez disséquer l'heure pour obtenir des valeurs distinctes pour l'heure actuelle, comme suit:

Calendar cal = Calendar.getInstance(); 

  int millisecond = cal.get(Calendar.MILLISECOND);
  int second = cal.get(Calendar.SECOND);
  int minute = cal.get(Calendar.MINUTE);
        //12 hour format
  int hour = cal.get(Calendar.HOUR);
        //24 hour format
  int hourofday = cal.get(Calendar.HOUR_OF_DAY);

Il en va de même pour la date, comme suit:

Calendar cal = Calendar.getInstance(); 

  int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
  int year = cal.get(Calendar.YEAR);
  int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
  int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);
SkateJerrySkate
la source
comment obtenir la date pour les 5-10 prochains jours ... est-ce un calcul manuel ici?
CoDe
@CoDe Vous utilisez la date pour cela
FindOutIslamNow
27

Il existe plusieurs options car Android est principalement Java, mais si vous souhaitez l'écrire dans une TextView, le code suivant ferait l'affaire:

String currentDateTimeString = DateFormat.getDateInstance().format(new Date());

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
dLobatog
la source
8
Vous devez utiliser Calendarou GregorianCalendar. La Dateclasse est obsolète.
Joseph Earl
Merci mon ami :) Je n'en avais aucune idée
dLobatog
12
Selon la documentation de référence Date () ( developer.android.com/reference/java/util/Date.html ), rien ne fait référence à la classe Date () dépréciée - cependant, plusieurs méthodes et constructeurs sont dépréciés.
Zac Seth
2
Cela produira un résultat incorrect dans le sens des paramètres utilisateur actuels (format 12/24, par exemple). Utilisez android.text.format.DateFormat.getTimeFormat (contexte contextuel) pour obtenir DateFormat pour les paramètres utilisateur actuels.
wonder.mice
@Zac vous avez raison, même la méthode getTime de Date est encore plus utilisée
24
SimpleDateFormat databaseDateTimeFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat databaseDateFormate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEE, MMM d, ''yy");
SimpleDateFormat sdf4 = new SimpleDateFormat("h:mm a");
SimpleDateFormat sdf5 = new SimpleDateFormat("h:mm");
SimpleDateFormat sdf6 = new SimpleDateFormat("H:mm:ss:SSS");
SimpleDateFormat sdf7 = new SimpleDateFormat("K:mm a,z");
SimpleDateFormat sdf8 = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa");


String currentDateandTime = databaseDateTimeFormate.format(new Date());     //2009-06-30 08:29:36
String currentDateandTime = databaseDateFormate.format(new Date());     //2009-06-30
String currentDateandTime = sdf1.format(new Date());     //30.06.09
String currentDateandTime = sdf2.format(new Date());     //2009.06.30 AD at 08:29:36 PDT
String currentDateandTime = sdf3.format(new Date());     //Tue, Jun 30, '09
String currentDateandTime = sdf4.format(new Date());     //8:29 PM
String currentDateandTime = sdf5.format(new Date());     //8:29
String currentDateandTime = sdf6.format(new Date());     //8:28:36:249
String currentDateandTime = sdf7.format(new Date());     //8:29 AM,PDT
String currentDateandTime = sdf8.format(new Date());     //2009.June.30 AD 08:29 AM

Modèles de format de date

G   Era designator (before christ, after christ)
y   Year (e.g. 12 or 2012). Use either yy or yyyy.
M   Month in year. Number of M's determine length of format (e.g. MM, MMM or MMMMM)
d   Day in month. Number of d's determine length of format (e.g. d or dd)
h   Hour of day, 1-12 (AM / PM) (normally hh)
H   Hour of day, 0-23 (normally HH)
m   Minute in hour, 0-59 (normally mm)
s   Second in minute, 0-59 (normally ss)
S   Millisecond in second, 0-999 (normally SSS)
E   Day in week (e.g Monday, Tuesday etc.)
D   Day in year (1-366)
F   Day of week in month (e.g. 1st Thursday of December)
w   Week in year (1-53)
W   Week in month (0-5)
a   AM / PM marker
k   Hour in day (1-24, unlike HH's 0-23)
K   Hour in day, AM / PM (0-11)
z   Time Zone
Vignesh KM
la source
1
Bien que d'autres réponses soient également correctes. J'ai aimé cette réponse car elle aide également les problèmes liés au temps. Merci @Vighnesh KM
Ankit Gupta
17
final Calendar c = Calendar.getInstance();
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);

textView.setText(""+mDay+"-"+mMonth+"-"+mYear);
Alex Muriithi
la source
15

Il s'agit d'une méthode qui sera utile pour obtenir la date et l'heure:

private String getDate(){
    DateFormat dfDate = new SimpleDateFormat("yyyy/MM/dd");
    String date=dfDate.format(Calendar.getInstance().getTime());
    DateFormat dfTime = new SimpleDateFormat("HH:mm");
    String time = dfTime.format(Calendar.getInstance().getTime());
    return date + " " + time;
}

Vous pouvez appeler cette méthode et obtenir les valeurs de date et d'heure actuelles:

2017/01//09 19:23
Jorgesys
la source
Je n'aime pas le couplage étroit entre logique de présentation et logique de processus; Je préfère une méthode qui ne fait que le formatage et prend un paramètre d'entrée de date. Je ne comprends pas non plus pourquoi vous utilisez 2 SimpleDateFormats et 2 Dates ... ne pouvez-vous pas simplement utiliser une fois "yyyy/MM/dd HH:mm"le format et le calendrier des appels?
AjahnCharles
12
Time time = new Time();
time.setToNow();
System.out.println("time: " + time.hour+":"+time.minute);

Cela vous donnera, par exemple, 12:32.

N'oubliez pas d'importer android.text.format.Time;

Sam Haque
la source
12
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();
    System.out.println("time => " + dateFormat.format(cal.getTime()));

    String time_str = dateFormat.format(cal.getTime());

    String[] s = time_str.split(" ");

    for (int i = 0; i < s.length; i++) {
         System.out.println("date  => " + s[i]);
    }

    int year_sys = Integer.parseInt(s[0].split("/")[0]);
    int month_sys = Integer.parseInt(s[0].split("/")[1]);
    int day_sys = Integer.parseInt(s[0].split("/")[2]);

    int hour_sys = Integer.parseInt(s[1].split(":")[0]);
    int min_sys = Integer.parseInt(s[1].split(":")[1]);

    System.out.println("year_sys  => " + year_sys);
    System.out.println("month_sys  => " + month_sys);
    System.out.println("day_sys  => " + day_sys);

    System.out.println("hour_sys  => " + hour_sys);
    System.out.println("min_sys  => " + min_sys);
duggu
la source
12

Pour la date et l'heure actuelles avec format, utilisez

En Java

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Log.d("Date","DATE : " + strDate)

À Kotlin

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val current = LocalDateTime.now()
    val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss")
    var myDate: String =  current.format(formatter)
    Log.d("Date","DATE : " + myDate)
} else {
    var date = Date()
    val formatter = SimpleDateFormat("MMM dd yyyy HH:mma")
    val myDate: String = formatter.format(date)
    Log.d("Date","DATE : " + myDate)
}

Modèles de formatage de date

"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
Vipul Prajapati
la source
Merci d'avoir voulu contribuer. Contribuez-vous quelque chose qui n'est pas déjà dans les 36 réponses précédentes? Dans tous les cas, vous utilisez toujours la SimpleDateFormatclasse notoirement gênante et obsolète . Même avant Oreo dont vous n'avez pas besoin, vous pouvez utiliser à la place ThreeTenABP , le backport de java.time, l'API Java moderne de date et d'heure.
Ole VV
11

Vous pouvez également utiliser android.os.SystemClock. Par exemple, SystemClock.elapsedRealtime () vous donnera des relevés d'heure plus précis lorsque le téléphone est en veille.

Quadroïde
la source
10

Si vous avez besoin de la date actuelle:

Calendar cc = Calendar.getInstance();
int year = cc.get(Calendar.YEAR);
int month = cc.get(Calendar.MONTH);
int mDay = cc.get(Calendar.DAY_OF_MONTH);
System.out.println("Date", year + ":" + month + ":" + mDay);

Si vous avez besoin de l'heure actuelle:

 int mHour = cc.get(Calendar.HOUR_OF_DAY);
 int mMinute = cc.get(Calendar.MINUTE);
 System.out.println("time_format" + String.format("%02d:%02d", mHour , mMinute));
RejoylinLokeshwaran
la source
9

Pour un format d'heure et de date personnalisé:

    SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
    String cDateTime=dateFormat.format(new Date());

La sortie est comme le format ci-dessous: 2015-06-18T10: 15: 56-05: 00

Omar Faroque Anik
la source
8
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
Muhammad Aamir Ali
la source
8
Time now = new Time();
now.setToNow();

Essayez cela fonctionne aussi pour moi.

L'homme
la source
8

Vous pouvez obtenir la date en utilisant:

Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");

Cela vous donnera un résultat sous une belle forme, comme dans cet exemple: "2014/02/09".

Annabelle
la source
Le constructeur sans paramètre Time t = new Time();utilisera le fuseau horaire par défaut. D'après mon expérience, par défaut == actuel.
William T. Mallard,
7

Eh bien, j'ai eu des problèmes avec certaines réponses de l'API, donc je fusionne ce code, j'espère qu'il les sert les gars:

    Time t = new Time(Time.getCurrentTimezone());
    t.setToNow();
    String date1 = t.format("%Y/%m/%d");

    Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
            Locale.ENGLISH);
    String var = dateFormat.format(date);
    String horafecha = var+ " - " + date1;

    tvTime.setText(horafecha);

Sortie: 15h25 - 03/10/2017

Charlie
la source
7

Vous pouvez simplement utiliser le code suivant:

 DateFormat df = new SimpleDateFormat("HH:mm"); // Format time
 String time = df.format(Calendar.getInstance().getTime());

 DateFormat df1 = new SimpleDateFormat("yyyy/MM/dd"); // Format date
 String date = df1.format(Calendar.getInstance().getTime());
Ali Ziaee
la source
6

Essaye ça

String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
Abhinaw Kumar
la source
C'est une doublure parfaite et une solution élégante. C'est tout ce qu'il faut, pas des solutions inutilement longues comme dans les autres réponses.
zeeshan
5

La méthode ci-dessous renverra la date et l'heure actuelles dans la chaîne, utilisez un fuseau horaire différent en fonction de votre fuseau horaire réel.J'ai utilisé GMT

public static String GetToday(){
    Date presentTime_Date = Calendar.getInstance().getTime();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    return dateFormat.format(presentTime_Date);
}
Danger
la source
4

Vous devez utiliser la classe Calender selon la nouvelle API. La classe de date est désormais obsolète.

Calendar cal = Calendar.getInstance();

String date = ""+cal.get(Calendar.DATE)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR);

String time = ""+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE);
Akshay Paliwal
la source
4

Essayez d'utiliser le code ci-dessous:

 Date date = new Date();
 SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());  
 String currentDate = dateFormatWithZone.format(date);
Manikandan K
la source