Etudier l'API de date du package java.time. J'ai essayé diverses choses de manière appropriée. La source suivante.
package java8.dateapi;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;
/**
* java.Etudier l'API de date du package de temps
* @author komikcomik
*
*/
public class DateApiStudy {
public static void main(String[] args) {
/*Essayez d'obtenir l'heure actuelle pour le moment*/
System.out.println("---------------------Vérification 1 Affichage approprié en utilisant l'heure actuelle-----------------------");
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("Sortie pour le moment [" + zonedDateTime + "】"); //Sortie sans réfléchir
/*Année, mois, jour, heure, minute, seconde, milliseconde, etc.*/
System.out.println("Année 【" + zonedDateTime.getYear() + "】");
System.out.println("Mois 【" + zonedDateTime.getMonthValue() + "】"); // getMonth()Notez que OCTOBRE sera retourné.
System.out.println("Journée 【" + zonedDateTime.getDayOfMonth() + "】");
System.out.println("Temps 【" + zonedDateTime.getHour() + "】");
System.out.println("Minutes [" + zonedDateTime.getMinute() + "】");
System.out.println("Secondes [" + zonedDateTime.getSecond() + "】");
System.out.println("Millimètres ou moins [" + zonedDateTime.getNano() + "】");
System.out.println("Seulement milliseconde [" + zonedDateTime.getLong(ChronoField.MILLI_OF_SECOND) + "】");
System.out.println("Si vous souhaitez afficher quelque chose comme l'heure UTC + [" + zonedDateTime.getOffset() + "】");
/*Faire une heure spécifiée*/
System.out.println("---------------------Vérification 2 Faites une heure spécifiée-----------------------");
ZonedDateTime shiteiTime = ZonedDateTime.of(2017, 10, 19, 16, 58, 59, 123456789, ZoneId.systemDefault());
System.out.println("Sortie 2 pour le moment [" + shiteiTime + "】"); //Sortie sans réfléchir
/*Convertir en chaîne standard*/
System.out.println("---------------------Vérification 3-----------------------");
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS");
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.nnnnnnnnn");
System.out.println("Formez jusqu'à la milliseconde et éteignez [" + shiteiTime.format(dtf1) + "】");
System.out.println("Formez en nanosecondes et éteignez [" + shiteiTime.format(dtf2) + "】");
/*Convertir de l'objet String en objet LocalDateTime*/
System.out.println("---------------------Validation 4 Conversion de String en LocalDateTime-----------------------");
String dateStr = "2017/10/19 16:58:59.123456789";
LocalDateTime ldt = LocalDateTime.parse(dateStr, dtf2);
if (ldt.equals(shiteiTime.toLocalDateTime())) {
System.out.println("Correspond à ce qui a été converti de String en LocalDateTime=" + ldt);
} else {
System.out.println("Ne correspond pas à ce qui a été converti de String en LocalDateTime");
}
/*Convertir de l'objet String en objet ZonedDateTime*/
System.out.println("---------------------Validation 5 Conversion de chaîne en ZonedDateTime-----------------------");
String dateStrWithTimeZone = "2017/10/19 16:58:59.123456789 JST";
DateTimeFormatter dtfWithTimeZone = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.nnnnnnnnn zzz");
ZonedDateTime zdt = ZonedDateTime.parse(dateStrWithTimeZone, dtfWithTimeZone);
if (zdt.equals(shiteiTime)) {
System.out.println("Correspond à ce qui a été converti de String en ZonedDateTime=" + zdt);
} else {
System.out.println("Ne correspond pas à ce qui a été converti de String en ZonedDateTime");
}
/* java.util.Convertir en date*/
System.out.println("---------------------Vérification 5 java.util.Convertir en date-----------------------");
Date date = Date.from(shiteiTime.toInstant());
System.out.println(date);
/*Calculer à la fin du mois*/
System.out.println("---------------------Vérification 6 Calculez la fin du mois avec Année Mois-----------------------");
YearMonth ym = YearMonth.from(ldt);
System.out.println("Fin du mois=" + ym.atEndOfMonth());
ym = YearMonth.from(ldt.minusMonths(1));
System.out.println("Fin du mois dernier=" + ym.atEndOfMonth());
ym = YearMonth.from(ldt.plusMonths(1));
System.out.println("Fin du mois prochain=" + ym.atEndOfMonth());
System.out.println("---------------------Vérification 7 Calculez le début et la fin du mois avec des ajusteurs temporels-----------------------");
System.out.println(ldt.with(TemporalAdjusters.firstDayOfMonth()));
System.out.println(ldt.with(TemporalAdjusters.lastDayOfMonth()));
}
}
Ci-dessous, le résultat de l'exécution
---------------------Vérification 1 Affichage approprié en utilisant l'heure actuelle-----------------------
Résultats pour le moment [2017-10-19T17:59:27.773+09:00[Asia/Tokyo]】
Année [2017]
Mois [10]
Soleil [19]
Heure [17]
Minute [59]
Secondes [27]
Millimètres ou moins [773000000]
Seulement milliseconde [773]
Si vous souhaitez afficher quelque chose comme l'heure UTC + [+09:00】
---------------------Vérification 2 Faites une heure spécifiée-----------------------
Produit 2 pour le moment [2017-10-19T16:58:59.123456789+09:00[Asia/Tokyo]】
---------------------Vérification 3-----------------------
Mise en forme en milliseconde et sortie [2017/10/19 16:58:59.123】
Façonner en nanosecondes et éteindre [2017/10/19 16:58:59.123456789】
---------------------Validation 4 Conversion de String en LocalDateTime-----------------------
Correspond à ce qui a été converti de String en LocalDateTime=2017-10-19T16:58:59.123456789
---------------------Validation 5 Conversion de chaîne en ZonedDateTime-----------------------
Correspond à ce qui a été converti de String en ZonedDateTime=2017-10-19T16:58:59.123456789+09:00[Asia/Tokyo]
---------------------Vérification 5 java.util.Convertir en date-----------------------
Thu Oct 19 16:58:59 JST 2017
---------------------Vérification 6 Calculez la fin du mois avec Année Mois-----------------------
Fin du mois=2017-10-31
Fin du mois dernier=2017-09-30
Fin du mois prochain=2017-11-30
---------------------Vérification 7 Calculez le début et la fin du mois avec des ajusteurs temporels-----------------------
2017-10-01T16:58:59.123456789
2017-10-31T16:58:59.123456789
Lors de l'enregistrement des données dans la colonne de date de DB, je les mappe souvent à java.util.Date avec myBatis, mais je voudrais essayer la prochaine fois si elles peuvent être mappées avec ZonedDateTime ou LocalDateTime.
Recommended Posts