Comment obtenir l’année, le mois, le jour, les heures, les minutes, les secondes et les millisecondes du moment actuel en Java?

Comment puis-je obtenir l’année, le mois, le jour, les heures, les minutes, les secondes et les millisecondes du moment actuel en Java? Je voudrais les avoir comme Ssortingngs .

Vous pouvez utiliser les java.time.LocalDateTime de java.time.LocalDateTime pour cela.

 LocalDateTime now = LocalDateTime.now(); int year = now.getYear(); int month = now.getMonthValue(); int day = now.getDayOfMonth(); int hour = now.getHour(); int minute = now.getMinute(); int second = now.getSecond(); int millis = now.get(ChronoField.MILLI_OF_SECOND); // Note: no direct getter available. System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis); 

Ou, lorsque vous n’êtes pas encore sur Java 8, utilisez java.util.Calendar .

 Calendar now = Calendar.getInstance(); int year = now.get(Calendar.YEAR); int month = now.get(Calendar.MONTH) + 1; // Note: zero based! int day = now.get(Calendar.DAY_OF_MONTH); int hour = now.get(Calendar.HOUR_OF_DAY); int minute = now.get(Calendar.MINUTE); int second = now.get(Calendar.SECOND); int millis = now.get(Calendar.MILLISECOND); System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis); 

De toute façon, cela imprime dès maintenant:

 2010-04-16 15: 15: 17.816

Pour convertir un int en Ssortingng , utilisez Ssortingng#valueOf() .


Si, après tout, vous avez l’intention de les organiser et de les afficher dans un format de chaîne conviviale, utilisez plutôt java.time.format.DateTimeFormatter ( tutoriel ici ) de java.time.format.DateTimeFormatter ,

 LocalDateTime now = LocalDateTime.now(); Ssortingng format1 = now.format(DateTimeFormatter.ISO_DATE_TIME); Ssortingng format2 = now.atZone(ZoneId.of("GMT")).format(DateTimeFormatter.RFC_1123_DATE_TIME); Ssortingng format3 = now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss", Locale.ENGLISH)); System.out.println(format1); System.out.println(format2); System.out.println(format3); 

ou lorsque vous n’êtes pas encore sur Java 8, utilisez java.text.SimpleDateFormat :

 Date now = new Date(); // java.util.Date, NOT java.sql.Date or java.sql.Timestamp! Ssortingng format1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(now); Ssortingng format2 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH).format(now); Ssortingng format3 = new SimpleDateFormat("yyyyMMddHHmmss", Locale.ENGLISH).format(now); System.out.println(format1); System.out.println(format2); System.out.println(format3); 

De toute façon, cela donne:

 2010-04-16T15: 15: 17.816
 Ven 16 avr 2010 15:15:17 GMT
 20100416151517

Voir également:

  • Chaîne Java à la conversion de date

Passez à joda-time et vous pouvez le faire en trois lignes

 DateTime jodaTime = new DateTime(); DateTimeFormatter formatter = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS"); System.out.println("jodaTime = " + formatter.print(jodaTime)); 

Vous avez également un access direct aux champs individuels de la date sans utiliser de calendrier.

 System.out.println("year = " + jodaTime.getYear()); System.out.println("month = " + jodaTime.getMonthOfYear()); System.out.println("day = " + jodaTime.getDayOfMonth()); System.out.println("hour = " + jodaTime.getHourOfDay()); System.out.println("minute = " + jodaTime.getMinuteOfHour()); System.out.println("second = " + jodaTime.getSecondOfMinute()); System.out.println("millis = " + jodaTime.getMillisOfSecond()); 

La sortie est la suivante:

 jodaTime = 2010-04-16 18:09:26.060 year = 2010 month = 4 day = 16 hour = 18 minute = 9 second = 26 millis = 60 

Selon http://www.joda.org/joda-time/

Joda-Time est la bibliothèque standard de date et d’heure pour Java. À partir de Java SE 8, les utilisateurs sont invités à migrer vers java.time (JSR-310).

Avec Java 8 et versions ultérieures, utilisez le package java.time .

 ZonedDateTime.now().getYear(); ZonedDateTime.now().getMonthValue(); ZonedDateTime.now().getDayOfMonth(); ZonedDateTime.now().getHour(); ZonedDateTime.now().getMinute(); ZonedDateTime.now().getSecond(); 

ZonedDateTime.now() est une méthode statique renvoyant la date / heure actuelle à partir de l’horloge système dans le fuseau horaire par défaut. Toutes les méthodes get retournent une valeur int .

  // Java 8 System.out.println(LocalDateTime.now().getYear()); // 2015 System.out.println(LocalDateTime.now().getMonth()); // SEPTEMBER System.out.println(LocalDateTime.now().getDayOfMonth()); // 29 System.out.println(LocalDateTime.now().getHour()); // 7 System.out.println(LocalDateTime.now().getMinute()); // 36 System.out.println(LocalDateTime.now().getSecond()); // 51 System.out.println(LocalDateTime.now().get(ChronoField.MILLI_OF_SECOND)); // 100 // Calendar System.out.println(Calendar.getInstance().get(Calendar.YEAR)); // 2015 System.out.println(Calendar.getInstance().get(Calendar.MONTH ) + 1); // 9 System.out.println(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)); // 29 System.out.println(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)); // 7 System.out.println(Calendar.getInstance().get(Calendar.MINUTE)); // 35 System.out.println(Calendar.getInstance().get(Calendar.SECOND)); // 32 System.out.println(Calendar.getInstance().get(Calendar.MILLISECOND)); // 481 // Joda Time System.out.println(new DateTime().getYear()); // 2015 System.out.println(new DateTime().getMonthOfYear()); // 9 System.out.println(new DateTime().getDayOfMonth()); // 29 System.out.println(new DateTime().getHourOfDay()); // 7 System.out.println(new DateTime().getMinuteOfHour()); // 19 System.out.println(new DateTime().getSecondOfMinute()); // 16 System.out.println(new DateTime().getMillisOfSecond()); // 174 // Formatted // 2015-09-28 17:50:25.756 System.out.println(new Timestamp(System.currentTimeMillis())); // 2015-09-28T17:50:25.772 System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(new Date())); // Java 8 // 2015-09-28T17:50:25.810 System.out.println(LocalDateTime.now()); // joda time // 2015-09-28 17:50:25.839 System.out.println(DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS").print(new org.joda.time.DateTime())); 

Ou utilisez java.sql.Timestamp. Calendrier est un peu lourd, je recommande de ne pas l’utiliser dans le code de production. Joda c’est mieux.

 import java.sql.Timestamp; public class DateTest { /** * @param args */ public static void main(Ssortingng[] args) { System.out.println(new Timestamp(System.currentTimeMillis())); } } 

tl; dr

 ZonedDateTime.now( // Capture current moment as seen in the wall-clock time used by the people of a particular region (a time zone). ZoneId.of( "America/Montreal" ) // Specify desired/expected time zone. Or pass `ZoneId.systemDefault` for the JVM's current default time zone. ) // Returns a `ZonedDateTime` object. .getMinute() // Extract the minute of the hour of the time-of-day from the `ZonedDateTime` object. 

42

ZonedDateTime

Pour capturer le moment présent dans le temps utilisé par les personnes d’une région donnée (un fuseau horaire), utilisez ZonedDateTime .

Un fuseau horaire est crucial pour déterminer une date. Pour un moment donné, la date varie dans le monde entier par zone. Par exemple, quelques minutes après minuit à Paris, la France est une nouvelle journée alors qu’elle est encore «hier» à Montréal, au Québec .

Si aucun fuseau horaire n’est spécifié, la machine virtuelle Java applique implicitement son fuseau horaire par défaut. Ce défaut peut changer à tout moment pendant l’exécution (!), Vos résultats peuvent donc varier. Mieux vaut spécifier explicitement votre fuseau horaire souhaité / attendu en argument.

Spécifiez un nom de fuseau horaire approprié dans le format de continent/region , tel que America/Montreal , Africa/Casablanca ou Pacific/Auckland . N’utilisez jamais l’abréviation de 3-4 lettres comme EST ou IST car ce ne sont pas de véritables fuseaux horaires, non standardisés, et même pas uniques (!).

 ZoneId z = ZoneId.of( "America/Montreal" ) ; ZonedDateTime zdt = ZonedDateTime.now( z ) ; 

Appelez l’un des nombreux getters pour sortir des morceaux de la date-heure.

 int year = zdt.getYear() ; int monthNumber = zdt.getMonthValue() ; Ssortingng monthName = zdt.getMonth().getDisplayName( TextStyle.FULL , Locale.JAPAN ) ; // Locale determines human language and cultural norms used in localizing. Note that `Locale` has *nothing* to do with time zone. int dayOfMonth = zdt.getDayOfMonth() ; Ssortingng dayOfWeek = zdt.getDayOfWeek().getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ; int hour = zdt.getHour() ; // Extract the hour from the time-of-day. int minute = zdt.getMinute() ; int second = zdt.getSecond() ; int nano = zdt.getNano() ; 

Les classes java.time se résolvent en nanosecondes . Votre question demandait la fraction de seconde en millisecondes . De toute évidence, vous pouvez diviser par un million pour tronquer les nanosecondes en millisecondes, au prix d’une éventuelle perte de données. Ou utilisez l’énumération TimeUnit pour une telle conversion.

 long millis = TimeUnit.NANOSECONDS.toMillis( zdt.getNano() ) ; 

DateTimeFormatter

Pour produire une Ssortingng afin de combiner des morceaux de texte, utilisez la classe DateTimeFormatter . Search Stack Overflow pour plus d’informations à ce sujet.

Instant

Généralement, il vaut mieux suivre les moments en UTC. Pour ajuster une date-heure zonée à l’heure UTC, extrayez un Instant .

 Instant instant = zdt.toInstant() ; 

Et reviens encore.

 ZonedDateTime zdt = instant.atZone( ZoneId.of( "Africa/Tunis" ) ) ; 

LocalDateTime

Quelques autres réponses utilisent la classe LocalDateTime . Cette classe n’est pas adaptée au suivi des moments réels, des moments spécifiques de la chronologie, car elle ne contient aucun concept de fuseau horaire ou de décalage par rapport à l’heure UTC.

Alors, à quoi sert LocalDateTime ? Utilisez LocalDateTime lorsque vous avez l’intention d’appliquer une date et une heure à une localité ou à toutes les localités , plutôt qu’à une localité spécifique.

Par exemple, Noël cette année commence au LocalDateTime.parse( "2018-12-25T00:00:00" ) . Cette valeur n’a de sens que si vous appliquez un fuseau horaire (un ZoneId ) pour obtenir un ZonedDateTime . Noël se passe d’abord à Kiribati , puis plus tard en Nouvelle-Zélande et en Asie extrême-orientale. Quelques heures plus tard, Noël commence en Inde. Plus d’heure plus tard en Afrique et en Europe. Et pas encore Noël dans les Amériques avant plusieurs heures. Noël à n’importe quel endroit devrait être représenté avec ZonedDateTime . Noël est représenté partout avec un LocalDateTime .


À 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… .

en java 7 calendrier une ligne

 new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(Calendar.getInstance().getTime()) 

Regardez la documentation de l’API pour la classe java.util.Calendar et ses dérivés (vous serez peut-être particulièrement intéressé par la classe GregorianCalendar).

Calendar now = new Calendar () // ou nouveau GregorianCalendar (), ou quelle que soit la saveur dont vous avez besoin

maintenant.MONTH maintenant.HOUR

etc.