Comment obtenir l'heure et la date actuelles dans une application Android ?
Réponses
Trop de publicités?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 dépassées. Les anciennes classes de date et d'heure se sont révélées mal conçues, confuses et gênantes.
java.time
Ces anciennes classes ont été supplantées par les java.time cadre.
- Java 8 et plus : Le site java.time est intégré.
- Java 7 et 6 : utilisez le backport de java.time .
- Android : Utilisez cette version enveloppée de ce backport .
Ces nouveaux cours s'inspirent du très populaire Joda-Time projet, défini par JSR 310 et prolongé par le Trois-Dix-Extra projet.
Voir le Tutoriel Oracle .
Instant
Un site Instant
est un moment sur la ligne de temps dans UTC avec une résolution allant jusqu'à nanosecondes .
Instant instant = Instant.now(); // Current moment in UTC.
Fuseau horaire
Appliquer 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é. Il est préférable de spécifier explicitement le fuseau horaire souhaité/attendu.
Utilisez les noms de fuseaux horaires corrects au format de continent/region
comme America/Montreal
, Europe/Brussels
o Asia/Kolkata
. N'utilisez jamais les abréviations de 3-4 lettres telles que EST
o IST
car ils ne sont ni normalisés 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 de caractères
Vous pouvez facilement générer un String
comme une représentation textuelle de la valeur date-heure. Vous pouvez opter pour un format standard, votre propre format personnalisé ou un format localisé automatiquement.
ISO 8601
Vous pouvez appeler le toString
des méthodes pour obtenir un texte formaté à l'aide de la méthode commune et sensée ISO 8601 standard.
String output = instant.toString();
2016-03-23T03:09:01.613Z
Notez que pour ZonedDateTime
le toString
étend la norme ISO 8601 en ajoutant le nom du fuseau horaire entre crochets. Une information extrêmement utile et importante, mais non standard.
2016-03-22T20:09:01.613-08:00[America/Los_Angeles]
Format personnalisé
Vous pouvez également spécifier votre propre modèle de formatage particulier avec l'option DateTimeFormatter
classe.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );
Indiquez un Locale
pour une langue humaine (anglais, Français ) à utiliser pour traduire le nom du jour/mois et aussi pour définir les normes culturelles telles que l'ordre de l'année, du mois et de la date. Notez que Locale
n'a rien à voir avec le fuseau horaire.
formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );
Localisation du site
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 site java.time est intégré à Java 8 et aux versions ultérieures. Ces classes remplacent les anciennes classes héritage les classes de date et d'heure telles que java.util.Date
, Calendar
, & SimpleDateFormat
.
Pour en savoir plus, consultez le Tutoriel Oracle . Et recherchez sur Stack Overflow de nombreux exemples et explications. La spécification est JSR 310 .
Le site Joda-Time Le projet, actuellement en mode de maintenance conseille de migrer vers le java.time clases.
Vous pouvez échanger java.time directement avec votre base de données. Utilisez un Pilote JDBC conforme à JDBC 4.2 ou plus tard. Pas besoin de ficelles, pas besoin de java.sql.*
classes. Support de Hibernate 5 et JPA 2.2 java.time .
Où peut-on obtenir les classes java.time ?
-
Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 et ultérieures - Partie de l'API Java standard avec une mise en œuvre groupée.
- Java 9 a apporté quelques fonctionnalités et corrections mineures.
-
Java SE 6 y Java SE 7
- La plupart des java.time est rétroportée vers Java 6 et 7 dans la section Trois Dix-Backport .
-
Android
- Les versions ultérieures d'Android (26+) intègrent des implémentations de l'algorithme de l'utilisateur. java.time clases.
- Pour les Android plus anciens (<26), le processus de Désamorçage de l'API apporte un sous-ensemble de la java.time une fonctionnalité qui n'était pas intégrée à l'origine dans Android.
- Si le désenfouissement n'offre pas ce dont vous avez besoin, les ThreeTenABP le projet s'adapte Trois Dix-Backport (mentionné ci-dessus) à Android. Voir Comment utiliser ThreeTenABP .
Essayez avec la manière suivante. Tous les formats sont donnés ci-dessous pour obtenir les formats de date et d'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);
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());
Sortie :
2014-11-11 00:47:55
Vous disposez également de quelques options de formatage supplémentaires pour SimpleDateFormat
de aquí .
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);
8 votes
43 réponses ! Si beaucoup d'entre elles étaient bonnes lorsqu'elles ont été écrites, la bonne réponse à utiliser en 2018 est la suivante . aquí .
1 votes
Fait amusant : tous les développeurs d'Android sont passés par là.