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