Obtenir l’heure et la date actuelles sur Android

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

Vous pouvez utiliser:

import java.util.Calendar Date currentTime = Calendar.getInstance().getTime(); 

Il y a beaucoup de constantes dans le Calendrier pour tout ce dont vous avez besoin.

Modifier:
Vérifier la documentation de la classe de calendrier

Vous pouvez ( mais ne devrait 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 est un remplacement plus rapide pour les classes java.util.Calendar et java.util.GregorianCalendar. Une instance de la classe Time représente un moment précis, spécifié avec une seconde précision.


NOTE 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 dit maintenant que “[sa] classe a un certain nombre de problèmes et qu’il est recommandé d’utiliser GregorianCalendar à la place”.


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

 Time time = new Time(); time.setToNow(); Log.d("TIME TEST", Long.toSsortingng(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é, 1410543205000 commençant alors à se répéter.

Si vous souhaitez obtenir la date et l’heure dans un modèle spécifique, vous pouvez utiliser les éléments suivants:

 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); Ssortingng currentDateandTime = sdf.format(new Date()); 

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

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

Considérant 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 

En fait, il est plus sûr de définir le fuseau horaire actuel sur le périphérique 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.

METTRE À JOUR

Comme de nombreuses personnes le font remarquer, Google affirme que cette classe présente un certain nombre de problèmes et qu’elle 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, lorsque vous effectuez des calculs de temps, toute l’arithmétique a actuellement lieu en utilisant des entiers de 32 bits. Cela limite la plage de temps fiable représentable de 1902 à 2037. Voir l’article de Wikipédia sur le problème de l’année 2038 pour plus de détails. Ne comptez pas sur ce comportement; cela peut changer dans le futur. L’appel de switchTimezone (Ssortingng) à une date qui ne peut exister, par exemple une heure de mur ignorée en raison d’une transition d’heure d’été, entraîne une date en 1969 (-1 ou 1 seconde avant le 1er janvier 1970). Une grande partie du formatage / parsing suppose du texte ASCII et ne convient donc pas pour une utilisation avec des scripts non-ASCII.

Pour la date et l’heure actuelles, utilisez:

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

Quelles sorties:

 Feb 27, 2012 5:41:23 PM 

Essayez de cette façon Tous les formats sont donnés ci-dessous pour obtenir le format de date et d’heure.

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

premier

seconde troisième

Pour connaître l’heure actuelle, vous pouvez utiliser System.currentTimeMillis() 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(); 

Vous pouvez utiliser le code:

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

Sortie:

 2014-11-11 00:47:55 

Vous obtenez également d’autres options de formatage pour SimpleDateFormat partir d’ ici .

Facile, vous pouvez disséquer le temps 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); 

Même chose 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); 

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 date-heure se sont avérées mal conçues, déroutantes et gênantes.

java.time

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

  • Java 8 et versions ultérieures: Le framework java.time est intégré.
  • Java 7 & 6: utilisez le backport de java.time .
  • Android: utilisez cette version enveloppée de ce backport .

Ces nouvelles classes sont inspirées par le projet très réussi Joda-Time , défini par JSR 310 et prolongé par le projet ThreeTen-Extra .

Voir le didacticiel Oracle .

Instant

Un Instant est un moment de la chronologie 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 de votre JVM est implicitement appliqué. Mieux vaut spécifier explicitement le fuseau horaire souhaité / prévu.

Utilisez les noms de fuseaux horaires appropriés dans le format de continent/region tel que America/Montreal , Europe/Brussels ou Asia/Kolkata . N’utilisez jamais les abréviations de 3 à 4 lettres telles que EST ou IST car elles ne sont ni normalisées ni uniques.

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

Génération de chaînes

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

ISO 8601

Vous pouvez appeler les méthodes toSsortingng pour obtenir du texte formaté en utilisant la norme ISO 8601 commune et sensible.

 Ssortingng output = instant.toSsortingng(); 

2016-03-23T03: 09: 01.613Z

Notez que pour ZonedDateTime , la méthode toSsortingng é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 [America / Los_Angeles]

Format personnalisé

Ou spécifiez votre propre modèle de formatage avec la classe DateTimeFormatter .

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

Spécifiez un Locale pour une langue humaine (anglais, français , etc.) à utiliser pour traduire le nom du jour / mois et pour définir des normes culturelles telles que l’ordre des années et des mois et des dates. Notez que Locale n’a rien à voir avec le fuseau horaire.

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

Localisation

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

 DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM ); Ssortingng 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 anciennes classes de date / heure héritées telles que java.util.Date , Calendar et SimpleDateFormat .

Le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers les classes java.time .

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 objects java.time directement avec votre firebase database. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de classes java.sql.* .

Où obtenir les classes java.time?

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

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts futurs à java.time. Vous pouvez y trouver des classes utiles telles que Interval , YearWeek , YearQuarter , etc.

Il y a plusieurs options comme Android est principalement Java, mais si vous souhaitez l’écrire dans un textView, le code suivant ferait l’affaire:

 Ssortingng currentDateTimeSsortingng = DateFormat.getDateInstance().format(new Date()); // textView is the TextView view that should display it textView.setText(currentDateTimeSsortingng); 
 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"); Ssortingng currentDateandTime = databaseDateTimeFormate.format(new Date()); //2009-06-30 08:29:36 Ssortingng currentDateandTime = databaseDateFormate.format(new Date()); //2009-06-30 Ssortingng currentDateandTime = sdf1.format(new Date()); //30.06.09 Ssortingng currentDateandTime = sdf2.format(new Date()); //2009.06.30 AD at 08:29:36 PDT Ssortingng currentDateandTime = sdf3.format(new Date()); //Tue, Jun 30, '09 Ssortingng currentDateandTime = sdf4.format(new Date()); //8:29 PM Ssortingng currentDateandTime = sdf5.format(new Date()); //8:29 Ssortingng currentDateandTime = sdf6.format(new Date()); //8:28:36:249 Ssortingng currentDateandTime = sdf7.format(new Date()); //8:29 AM,PDT Ssortingng currentDateandTime = sdf8.format(new Date()); //2009.June.30 AD 08:29 AM 

Format de date

 G Era designator (before christ, after christ) y Year (eg 12 or 2012). Use either yy or yyyy. M Month in year. Number of M's determine length of format (eg MM, MMM or MMMMM) d Day in month. Number of d's determine length of format (eg 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 (eg Monday, Tuesday etc.) D Day in year (1-366) F Day of week in month (eg 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 
 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); 

Vous pouvez également utiliser android.os.SystemClock. Par exemple, SystemClock.elapsedRealtime () vous donnera des lectures de temps plus précises lorsque le téléphone est en veille.

 Time time = new Time(); time.setToNow(); System.out.println("time: " + time.hour+":"+time.minute); 

Cela vous donnera, par exemple, 12h32.

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

  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Calendar cal = Calendar.getInstance(); System.out.println("time => " + dateFormat.format(cal.getTime())); Ssortingng time_str = dateFormat.format(cal.getTime()); Ssortingng[] 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); 

C’est une méthode qui sera utile pour obtenir la date et l’heure:

 private Ssortingng getDate(){ DateFormat dfDate = new SimpleDateFormat("yyyy/MM/dd"); Ssortingng date=dfDate.format(Calendar.getInstance().getTime()); DateFormat dfTime = new SimpleDateFormat("HH:mm"); Ssortingng 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 

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

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

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

Vous pouvez obtenir la date en utilisant:

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

Cela vous donnera un résultat sous une forme agréable, comme dans cet exemple: “2014/02/09”.

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"+Ssortingng.format("%02d:%02d", mHour , mMinute )); 
 Date todayDate = new Date(); todayDate.getDay(); todayDate.getHours(); todayDate.getMinutes(); todayDate.getMonth(); todayDate.getTime(); 
 Time now = new Time(); now.setToNow(); 

Essayez aussi cela fonctionne pour moi.

vous pouvez simplement utiliser le code suivant:

  DateFormat df = new SimpleDateFormat("HH:mm"); //format time Ssortingng time = df.format(Calendar.getInstance().getTime()); DateFormat df1=new SimpleDateFormat("yyyy/MM/dd");//foramt date Ssortingng date=df1.format(Calendar.getInstance().getTime()); 

Essaye ça

 Ssortingng mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toSsortingng()); 

La méthode ci-dessous renverra la date et l’heure actuelles en chaîne. Utilisez un fuseau horaire différent en fonction de votre fuseau horaire. J’ai utilisé GMT

 public static Ssortingng 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); } 

Eh bien, j’ai eu des problèmes avec certaines réponses de l’API, donc je fusionnais ce code, j’espère que cela les servira les gars:

  Time t = new Time(Time.getCurrentTimezone()); t.setToNow(); Ssortingng date1 = t.format("%Y/%m/%d"); Date date = new Date(System.currentTimeMillis()); SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa", Locale.ENGLISH); Ssortingng var = dateFormat.format(date); Ssortingng horafecha = var+ " - " + date1; tvTime.setText(horafecha); 

Sortie: 15h25 – 2017/10/03

Vous devez utiliser la classe Calender conformément à la nouvelle API. La classe de date est maintenant obsolète.

 Calendar cal = Calendar.getInstance(); Ssortingng date = ""+cal.get(Calendar.DATE)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR); Ssortingng time = ""+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE); 

Essayez ce code, il affiche la date et l’heure actuelles

  Date date = new Date(System.currentTimeMillis()); SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa", Locale.ENGLISH); Ssortingng var = dateFormat.format(date)); 

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()); Ssortingng currentDate = dateFormatWithZone.format(date);