1293 votes

Comment obtenir l'heure et la date actuelles dans Android

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

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à.

102voto

Basil Bourque Points 8938

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.

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 );

Table of date-time types in Java, both modern and legacy

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 ?

Table listing which implementation of the java.time technology to use on which versions of Java and Android.

85voto

Kirit Points 481

Pour connaître 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

65voto

amitsharma Points 283

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);

First

Second

Third

39voto

Himanshu Aggarwal Points 352

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í .

34voto

SkateJerrySkate Points 188

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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X