La date et l'heure de java8 ont été mises à jour

Classe de date et d'heure avant JDK1.8

Date C'est une classe de date et d'heure fournie par jdk1.0 et contient des millisecondes à partir de l'époque. "GMT 1 janvier 1970 00:00 à la milliseconde actuelle" La plupart des méthodes sont obsolètes (@Deprecated) en raison de problèmes liés à l'an 2000 et de performances.

Entrepreneurs survivants et méthodes


//produire
Date d1 = new Date();
Date d2 = new Date(System.currentTimeMillis() + 1);

// before,after
System.out.println(d1.after(d2));
System.out.println(d1.before(d2));

// set,get
d1.setTime(System.currentTimeMillis() + 1);
d2.setTime(System.currentTimeMillis() - 1);
System.out.println(d1.getTime());
System.out.println(d2.getTime());

Problème de date de l'an 2000

problème de l'an 2000


System.out.println(new Date(10, 1, 1));

⇒ Ce sera le 1er janvier 1910.

Date.java


public Date(int year, int month, int date, int hrs, int min, int sec) {
   int y = year + 1900; // <-ici
   //Abréviation
}

Calendar Une classe qui améliore le défaut de Date.java et représente un calendrier comme son nom l'indique.

  1. La classe Calendar a des champs pour l'année, le mois, le jour, l'heure, la minute, la seconde et la milliseconde. protected int fields[];

  2. Une classe abstraite, implémentée avec le modèle __ (probablement) __Tmeplate Method, En implémentant des sous-classes, les différences dans les calendriers utilisés dans le monde sont absorbées. Exemple: calendrier japonais, calendrier lunaire

API principale de Google Agenda

API Aperçu
Calendar Du calendrier(abstrait)Classe parent
TimeZone Représente le fuseau horaire
Locale Représente une région et produit différents calendriers

Génération de calendrier

Pour l'affichage


private static void show(Calendar cal) {
    System.out.println("Calendrier généré: " + cal.getClass().getName());
    System.out.println(
        cal.get(Calendar.YEAR) + "Année"
        + (cal.get(Calendar.MONTH) + 1) + "Mois"
        + cal.get(Calendar.DAY_OF_MONTH) + "journée"
        + cal.get(Calendar.HOUR_OF_DAY) + "Temps"
        + cal.get(Calendar.MINUTE) + "Minutes"
        + cal.get(Calendar.SECOND) + "Secondes");
}

produire


Calendrier Calendrier par défaut= Calendar.getInstance();
show(Calendrier par défaut);

Calendrier calendrier japonais_Fuseau horaire par défaut= Calendar.getInstance(new Locale("ja", "JP", "JP"));
show(Calendrier japonais_Fuseau horaire par défaut);

Région par défaut du calendrier_JST = Calendar.getInstance(TimeZone.getTimeZone("JST"));
show(Région par défaut_JST);

Calendrier calendrier japonais_GMT = Calendar.getInstance(TimeZone.getTimeZone("GMT"), new Locale("ja", "JP", "JP"));
show(Calendrier japonais_GMT);

production


Calendrier généré: java.util.GregorianCalendar
13 novembre 2017 12:20:00
Calendrier généré: java.util.JapaneseImperialCalendar
13 novembre 2017 12:20:00
Calendrier généré: java.util.GregorianCalendar
13 novembre 2017 12:20:00
Calendrier généré: java.util.JapaneseImperialCalendar
13 novembre 2017 3:20:00
  1. GregorianCalendar, généré dans la région par défaut
  2. JapaneseImperialCalendar, généré en faisant de la région Japon Japanese-Calendar.PNG

Calendar <=> Date

Calendar,Conversion de date


// Date to Calendar
Calendar.getInstance().setTime(new Date());
// Calendar to Date
Calendar.getInstance().getTime();

Différence entre add () et roll ()

Les deux add () et roll () servent à augmenter / diminuer le champ spécifié (année / mois / jour / heure / minute / seconde / milliseconde).

Haut Inférieur
add() Changer le haut Changement minimal
roll() Ne changez pas le haut Changement minimal

add()


Calendar calendar = Calendar.getInstance();
calendar.set(2015, Calendar.NOVEMBER,  30);
System.out.println("valeur initiale: " + formatter.format(calendar.getTime()));

calendar.add(Calendar.MONTH, 3);
System.out.println("add : " + formatter.format(calendar.getTime()));

__2015 / 11 / 30-> ajouter le mois + 3-> 2016/2/29 __

roll()


Calendar calendar = Calendar.getInstance();
calendar.set(2015, Calendar.NOVEMBER,  30);
System.out.println("valeur initiale: " + formatter.format(calendar.getTime()));

calendar.roll(Calendar.MONTH, 3);
System.out.println("roll : " + formatter.format(calendar.getTime()));

__2015 / 11 / 30-> mois roll + 3-> 2015/2/28 __

Clément et délai

python


SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
Calendar calendar = Calendar.getInstance();
calendar.set(2015, 15,  32);
System.out.println(formatter.format(calendar.getTime()));  // 2016/05/02

calendar.setLenient(false);
calendar.set(2015, 15,  32);
// Exception in thread "main" java.lang.IllegalArgumentException: MONTH
System.out.println(formatter.format(calendar.getTime()));

production


2016/05/02
Exception in thread "main" java.lang.IllegalArgumentException: MONTH
  1. La valeur par défaut de Lenient est true, alors autorisez 2015/15 / 32-> 2016/05 / 02
  2. Lenient = false ne permet pas le mois = 15
  3. __ Une exception est déclenchée par get () au lieu de set. __ __set () est retardé pour éviter les calculs inutiles. __

Classe de date et d'heure JDK 1.8

__ Le sujet principal! !! __ De nombreuses classes de date et d'heure ont été ajoutées au package java.time de JKD1.8.

API principale jdk8-datetime-class (1).png

API principale

API principale de date et d'heure Aperçu
TemporalAccessor À la date, à l'heure, au décalage ou à toute combinaison de ceux-ci, etc.Lecture seulementUne interface qui définit l'accès.
Temporal À la date, à l'heure, au décalage ou à toute combinaison de ceux-ci, etc.Lis/écrireUne interface qui définit l'accès.
TemporalAmount __Quantité de temps__Est l'interface qui définit.
TemporalField __Date heure__Une interface qui définit les champs de.
TemporalUnit __Unité de date et heure__Interface fonctionnelle qui définit.
TemporalAdjuster __Stratégie d'ajustement de la date et de l'heure__Interface fonctionnelle pour fournir.
TemporalQuery __Stratégie d'accès à la date et à l'heure__Interface fonctionnelle pour fournir.

TemporalAccessor

Méthode TemporalAccessor résultat
TemporalAccessor temporalAccessor = LocalDate.of(2016, 2, 9) 2016-02-09
temporalAccessor.get(ChronoField.YEAR) 2016
temporalAccessor.getLong(ChronoField.MONTH_OF_YEAR) 2
temporalAccessor.isSupported(ChronoField.HOUR_OF_DAY) false
temporalAccessor.range(ChronoField.DAY_OF_MONTH) 1 - 29
temporalAccessor.query(TemporalQueries.precision()) Days
  1. Récupérez l'instance avec un LocalDate qui implémente TemporalAccessor.
  2. Récupérez le champ "year" en l'utilisant dans le "ChronoField" qui implémente TemporalField.
  3. Implémentation de TemporalQuery Utilisez le TemporalQueries.zoneId () renvoyé pour obtenir la précision.

Temporal Temporal hérite de TemporalAccessor et ajoute une interface d'écriture.

Méthode temporelle résultat
Temporal temporal = LocalDate.of(2016, 10, 1) 2016-10-01
temporal.plus(10, ChronoUnit.MONTHS) 2017-08-01
temporal.minus(Period.ofYears(1)) 2015-10-01
temporal.minus(2, ChronoUnit.YEARS) 2014-10-01
temporal.with(ChronoField.YEAR, 2010) 2010-10-01
temporal.with(LocalDate.of(2010, 1, 10)) 2010-01-10
temporal.until(LocalDate.of(2016, 1, 1), ChronoUnit.DAYS) -274
  1. Addition et soustraction avec «Période» qui implémente la quantité temporelle.
  2. L'addition et la soustraction sont ajoutées et soustraites par «ChronoUnit» qui implémente TemporalUnit.
  3. Ajustez le «champ année» avec le «ChronoField» qui implémente TemporalField.
  4. LocalDate.of (2010, 1, 10) in temporal.with (LocalDate.of (2010, 1, 10)) est converti en Ajusteur temporel.

TemporalAmount

Méthode TemporalAmount résultat
TemporalAmount temporalAmount = Duration.ofDays(61) P61D
temporalAmount.getUnits() [Years, Months, Days]
temporalAmount.get(ChronoUnit.DAYS) 61
temporalAmount.get(ChronoUnit.MONTHS) 0
temporalAmount.subtractFrom(LocalDate.of(2010, 10, 1)) 2010-08-01
temporalAmount.addTo(LocalDate.of(2010, 10, 1)) 2010-12-01
  1. Obtenez une «instance» avec «Durée» qui implémente le montant temporel.
  2. Obtenez la valeur avec ChronoUnit qui implémente TemporalUnit.

TemporalField

Méthode TemporalField résultat
TemporalField year = ChronoField.YEAR Year
year.range() -999999999 - 999999999
year.getBaseUnit() Years
year.getDisplayName(Locale.JAPAN) Année
year.getFrom(LocalDate.of(2011, 1, 10)) 2011
year.getRangeUnit() Forever
year.isDateBased() true
year.isTimeBased() false

J'obtiens une instance avec ChronoField qui implémente TemporalField.

TemporalUnit

Méthode TemporalUnit résultat
TemporalUnit days = ChronoUnit.DAYS Days
days.addTo(LocalDate.of(2011, 1, 1), 2) 2011-01-03
days.getDuration() PT24H
days.isSupportedBy(LocalDate.now()) true
days.isDurationEstimated() true
days.isDateBased() true
days.isTimeBased() false

TemporalAdjuster&TemporalAdjusters

Méthode TemporalAdjuster résultat
TemporalAdjuster adjuster = LocalDate.of(2011, 1, 1) 2011-01-01
adjuster.adjustInto(LocalDate.of(9999, 10, 1)) 2011-01-01

Temporal Adjusters propose une variété de stratégies d'ajustement du temps.

TemporalAdjusters résultat
LocalDate.of(2011, 1, 1).with(TemporalAdjusters.lastDayOfYear()) 2011-12-31
LocalDate.of(2011, 1, 1).with(TemporalAdjusters.lastDayOfMonth()) 2011-01-31

TemporalQuery, TemporalQueries

Exemple: Combien de jours reste-t-il jusqu'à la fin de l'année?

python


TemporalQuery<Long> leftDays = temporal -> {
    LocalDate dayOfTarget = LocalDate.from(temporal);
    LocalDate lastDayOfYear = dayOfTarget.with(TemporalAdjusters.lastDayOfYear());
    Period period = dayOfTarget.until(lastDayOfYear);
    return ChronoUnit.DAYS.between(dayOfTarget, lastDayOfYear);
};
System.out.println(
    LocalDate.of(2015, 10, 3).query(leftDays)
);

Les requêtes temporelles offrent une variété de stratégies d'accès. Exemple: quelle est la précision de l'objet?

LocalDate.of(2015, 10, 3).query(TemporalQueries.precision())

Date et heure de mise en œuvre

Instant

  1. Classe __Invariant & Thread Safe __ qui représente les secondes d'époque (temps écoulé entre 1970-01-01T 00:00:00 Z).
  2. Maintenez jusqu'à nanosecondes.
  3. Il hérite de Temporal et TemporalAdjuster.
Obtenir l'instance toString()
Instant.now() 2017-11-14T01:47:25.392Z
Instant.now(Clock.systemUTC()) 2017-11-14T01:47:25.486Z
Instant.now(Clock.system(ZoneId.of("Asia/Shanghai"))) 2017-11-14T01:47:25.502Z
Instant.parse("2016-10-10T10:20:30.123Z") 2016-10-10T10:20:30.123Z
Instant.EPOCH 1970-01-01T00:00:00Z
Instant.ofEpochMilli(10) 1970-01-01T00:00:00.010Z
Instant.ofEpochSecond(1) 1970-01-01T00:00:01Z
Instant.ofEpochSecond(1, 2) 1970-01-01T00:00:01.000000002Z
Méthode régulière résultat
Instant instant = Instant.parse("2016-10-10T10:00:00.000Z") 2016-10-10T10:00:00Z
instant.toEpochMilli() 1476093600000
instant.plusSeconds(30) 2016-10-10T10:00:30Z
instant.minusSeconds(30) 2016-10-10T09:59:30Z
instant.isAfter(instant) false
instant.isBefore(instant) false
instant.equals(instant) true

LocalDate __ Aucun fuseau horaire Une classe immuable et thread-safe qui représente la date __ (aaaa-mm-jj). Il peut être utilisé pour les anniversaires.

Obtenir l'instance toString()
LocalDate.now() 2017-11-14
LocalDate.now(Clock.systemUTC()) 2017-11-14
LocalDate.now(ZoneId.of("Europe/Paris")) 2017-11-14
LocalDate.of(2015, 10, 1) 2015-10-01
LocalDate.parse("2015 - 10 - 10") 2015-10-10
LocalDate.ofYearDay(2016, 60) 2016-02-29
Méthode régulière toString()
LocalDate.of(2010, 2, 3).getYear() 2010
LocalDate.of(2010, 2, 3).getMonth() FEBRUARY
LocalDate.of(2010, 2, 3).getDayOfMonth() 3
LocalDate.of(2010, 3, 3).getDayOfWeek() WEDNESDAY
LocalDate.of(2010,1,1).withMonth(3).withYear(2016).withDayOfMonth(15) 2016-03-15
LocalDate.of(2010,1,1).withYear(2016).withDayOfYear(59) 2016-02-28
LocalDate.of(2010,1,1).minusYears(1).minusMonths(2).minusDays(3) 2008-10-29
LocalDate.of(2010,1,1).plusYears(1).plusMonths(2).plusDays(3) 2011-03-04

LocalTime __ Une classe immuable et thread-safe qui ne représente aucun fuseau horaire __ (HH: mm: ss.SSSSSSSSS).

Obtenir l'instance toString()
LocalTime.now() 12:06:40.790
LocalTime.now(Clock.systemUTC()) 03:06:40.805
LocalTime.now(ZoneId.of("Europe/Paris")) 04:06:40.868
LocalTime.of(6, 10, 30) 06:10:30
LocalTime.parse("10:20:30") 10:20:30
LocalTime.of(6, 10, 30, 999999999) 06:10:30.999999999
Méthode régulière toString()
LocalTime.of(10, 20, 30).getHour() 10
LocalTime.of(10, 20, 30).getSecond() 30
LocalTime.of(10, 20, 30).getMinute() 20
LocalTime.of(10, 20, 30).withHour(11).withMinute(22).withSecond(33).withNano(44) 11:22:33.000000044
LocalTime.of(10, 20, 30).minusHours(1).minusMinutes(1).minusSeconds(1).minusNanos(1) 09:19:28.999999999
LocalTime.of(10, 20, 30).plusHours(1).plusMinutes(1).plusSeconds(1).plusNanos(1) 11:21:31.000000001

LocalDateTime Il a LocalDate et LocalTime en interne, __ Aucun fuseau horaire Date Heure __ (aaaa-mm-jj HH: mm: ss.SSSSSSSSS) est une classe immuable et thread-safe.

LocalDataTime.java


/**
 * The date part.
 */
private final LocalDate date;
/**
 * The time part.
 */
private final LocalTime time;
Obtenir l'instance toString()
LocalDate.now() 2017-11-14T12:45:41.756
LocalDate.now(Clock.systemUTC()) 2017-11-14T03:45:41.756
LocalDate.now(ZoneId.of("Europe/Paris")) 2017-11-14T04:45:41.834
LocalDateTime.of(2010, 10, 1, 10, 20, 30, 123456789) 2010-10-01T10:20:30.123456789
ZonedDateTime.parse("2010-10-01T10:20:30.123456789") 2010-10-01T10:20:30.123456789
Méthode régulière toString()
LocalDateTime.of(2010, 10, 1, 10, 20, 30).getYear() 2010
LocalDateTime.of(2010, 10, 1, 10, 20, 30).getMonth() OCTOBER
LocalDateTime.of(2010, 10, 1, 10, 20, 30).getDayOfMonth() 1
LocalDateTime.of(2010, 10, 1, 10, 20, 30).getDayOfYear() 274
LocalDateTime.of(2010, 10, 1, 10, 20, 30).getHour() 10
LocalDateTime.of(2010, 10, 1, 10, 20, 30).getMinute() 20
LocalDateTime.of(2010, 10, 1, 10, 20, 30).getSecond() 30
LocalDateTime.of(2010, 10, 1, 10, 20, 30).plusYears(1) 2011-10-01T10:20:30
LocalDateTime.of(2010, 10, 1, 10, 20, 30).minusYears(1) 2009-10-01T10:20:30

ZoneDateTime __ Une classe immuable et thread-safe qui représente __ (HH: mm: ss.SSSSSSSSS) avec le fuseau horaire. L'utilisation de base semble être la même que LocalTimeDate.

Obtenir l'instance toString()
ZonedDateTime.now() 2017-11-14T12:53:12.536+09:00[Asia/Tokyo]
ZonedDateTime.now(Clock.systemUTC()) 2017-11-14T03:53:12.536Z
ZonedDateTime.now(ZoneId.of("Europe/Paris")) 2017-11-14T04:53:12.598+01:00[Europe/Paris]
ZonedDateTime.of(LocalDateTime.now(), ZoneId.of("Asia/Shanghai")) 2017-11-14T12:53:12.614+08:00[Asia/Shanghai]
ZonedDateTime.of(2010, 10, 1, 10, 20,30, 999, ZoneId.of("Asia/Tokyo")) 2010-10-01T10:20:30.000000999+09:00[Asia/Tokyo]
ZonedDateTime.parse("2010-10-01T10:20:30.000000999+09:00[Asia/Tokyo]") 2010-10-01T10:20:30.000000999+09:00[Asia/Tokyo]
Méthode régulière toString()
ZonedDateTime.of(2010, 10, 1, 10, 20, 30, 999, ZoneId.of("Asia/Tokyo")).getYear() 2010
ZonedDateTime.of(2010, 10, 1, 10, 20, 30, 999, ZoneId.of("Asia/Tokyo")).getMonth() OCTOBER
ZonedDateTime.of(2010, 10, 1, 10, 20, 30, 999, ZoneId.of("Asia/Tokyo")).getDayOfMonth() 1
ZonedDateTime.of(2010, 10, 1, 10, 20, 30, 999, ZoneId.of("Asia/Tokyo")).getDayOfYear() 274
ZonedDateTime.of(2010, 10, 1, 10, 20, 30, 999, ZoneId.of("Asia/Tokyo")).getHour() 10
ZonedDateTime.of(2010, 10, 1, 10, 20, 30, 999, ZoneId.of("Asia/Tokyo")).getMinute() 20
ZonedDateTime.of(2010, 10, 1, 10, 20, 30, 999, ZoneId.of("Asia/Tokyo")).getSecond() 30
ZonedDateTime.of(2010, 10, 1, 10, 20, 30, 999, ZoneId.of("Asia/Tokyo")).plusYears(1) 2011-10-01T10:20:30.000000999+09:00[Asia/Tokyo]
ZonedDateTime.of(2010, 10, 1, 10, 20, 30, 999, ZoneId.of("Asia/Tokyo")).minusYears(1) 2009-10-01T10:20:30.000000999+09:00[Asia/Tokyo]

OffsetDateTime C'est une combinaison de LocalDateTime et Offset.

https://docs.oracle.com/javase/jp/8/docs/api/java/time/OffsetDateTime.html "OffsetDateTime, ZonedDateTime et Instant enregistrent tous les instants dans des séries chronologiques avec une précision de l'ordre de la nanoseconde. Instant est le plus simple et représente simplement l'instant. OffsetDateTime ajoute le décalage de UTC / Greenwich à l'instant. Et vous permet d'obtenir la date / heure locale. ZonedDateTime ajoute une règle de fuseau horaire complète. "

OffsetDateTime.java


/**
 * The local date-time.
 */
private final LocalDateTime dateTime;
/**
 * The offset from UTC/Greenwich.
 */
private final ZoneOffset offset;

YearMonth、MonthDay

YearMonth: Une classe immuable et thread-safe qui représente yyyy-mm. MonthDay: Une classe immuable et thread-safe qui représente mm-dd.

Obtenir l'instance YearMonth toString()
YearMonth.now() 2017-11
YearMonth.now(Clock.systemUTC()) 2017-11
YearMonth.now(ZoneId.of("Europe/Paris")) 2017-11
YearMonth.of(2011, 10) 2011-10
YearMonth.parse("2012-10") 2012-10
Méthode régulière YearMonth toString()
YearMonth.of(2011, 10).getYear() 2011
YearMonth.of(2011, 10).getMonth() OCTOBER
YearMonth.of(2011, 10).plusMonths(2) 2011-12
YearMonth.of(2011, 10).minusYears(3) 2008-10
Obtenir l'instance MonthDay toString()
MonthDay.now() --11-14
MonthDay.now(Clock.systemUTC()) --11-14
MonthDay.now(ZoneId.of("Europe/Paris")) --11-14
MonthDay.of(5, 10) --05-10
MonthDay.parse("--05-10") --05-10
Méthode régulière MonthDay toString()
MonthDay.of(5, 10).getMonth() MAY
MonthDay.of(5, 10).getDayOfMonth() 10
MonthDay.of(5, 10).with(Month.JANUARY).withDayOfMonth(20) --01-20

Year Year: Une classe immuable et thread-safe qui représente yyyy.

Obtenir l'instance toString()
Year.now() 2017
Year.now(Clock.systemUTC()) 2017
Year.now(ZoneId.of("Europe/Paris")) 2017
Year.of(2011) 2011
Year.parse("2012") 2012
Méthode régulière toString()
Year.of(2011).getValue() 2011
Year.of(2011).plusYears(3) 2014
Year.of(2011).minusYears(10) 2001

Month、DayOfWeek Month, une énumération représentant le mois DayOfWeek, une énumération de jours

Obtenir l'instance du mois toString()
Month.of(10) OCTOBER
Month.valueOf("JANUARY") JANUARY
Month.FEBRUARY FEBRUARY
Méthode régulière du mois toString()
Month.of(1).getValue() 1
Month.of(12).plus(3) MARCH
Month.of(3).minus(4) NOVEMBER
Obtenir l'instance DayOfWeek toString()
DayOfWeek.of(1) MONDAY
DayOfWeek.valueOf("FRIDAY") FRIDAY
DayOfWeek.FRIDAY FRIDAY
Méthode régulière DayOfWeek toString()
DayOfWeek.of(1).getValue() 1
DayOfWeek.of(1).plus(7) MONDAY
DayOfWeek.of(1).minus(7) MONDAY

Clock __ Une classe qui représente l'heure système __ avec un fuseau horaire. La classe de date et d'heure now () est générée en fonction de cette horloge.

Obtenir l'horloge

Clock clockDefault = Clock.systemDefaultZone();  

defalut-clock-1.gif

Horloge UTC


Clock clockUTC = Clock.systemUTC();  

UTC-Clock2.gif

Horloge de désignation de fuseau horaire


Clock clockParis= Clock.system(ZoneId.of("Europe/Paris"));

clock-paris.gif

L'horloge est une horloge, donc le temps avance

Le temps avance


Clock clock = Clock.systemDefaultZone();
System.out.println(clock.instant());
Thread.sleep(1000 * 2);
System.out.println(clock.instant());
2017-11-13T11:41:27.548Z
2017-11-13T11:41:29.551Z

Obtenez une montre spéciale

Horloge qui est arrêtée


Clock fixedClock = Clock.fixed(Instant.now(), ZoneId.of("Asia/Tokyo"));
System.out.println("fixed clock : " + fixedClock.instant());
Thread.sleep(1000 * 2);
System.out.println("fixed clock : " + fixedClock.instant());

résultat


fixed clock : 2017-11-13T11:46:01.224Z
fixed clock : 2017-11-13T11:46:01.224Z

__⇒ L'horloge n'avance pas. __

Deuxième horloge


Clock secondsTickClock = Clock.tickSeconds(ZoneId.of("Asia/Tokyo"));
System.out.println("seconds tick clock : " + secondsTickClock.instant());
Thread.sleep(1000 * 2);
System.out.println("seconds tick clock : " + secondsTickClock.instant());

résultat


seconds tick clock : 2017-11-13T11:52:20Z
seconds tick clock : 2017-11-13T11:52:22Z

__ ⇒ En quelques secondes, ne tenez pas moins de secondes __

Horloge minute


Clock minutesTickClock = Clock.tickMinutes(ZoneId.of("Asia/Tokyo"));
System.out.println("minutes tick clock : " + minutesTickClock.instant());
Thread.sleep(1000 * 2);
System.out.println("minutes tick clock : " + minutesTickClock.instant());

résultat


minutes tick clock : 2017-11-13T11:52:00Z
minutes tick clock : 2017-11-13T11:52:00Z

__ ⇒ Minutes, ne tenez pas moins de secondes __

Horloge avancée de l'heure spécifiée


Clock nowClock = Clock.systemDefaultZone();
Clock offsetClock = Clock.offset(nowClock, Duration.ofDays(1));
System.out.println("nowClock : " + nowClock.instant());
System.out.println("offsetClock : " + offsetClock.instant());

résultat


nowClock : 2017-11-13T11:58:25.647Z
offsetClock : 2017-11-14T11:58:25.647Z

__⇒ Horloge un jour à l'avance __

TemporalAmount Duration Une classe immuable et thread-safe qui exprime la durée.

Obtenir l'instance résultat
Duration.ofDays(2) PT48H
Duration.ofHours(3) PT3H
Duration.ofMinutes(40) PT40M
Duration.parse("PT15M") PT15M
Méthode régulière résultat
Duration.ofDays(3).getUnits() [Seconds, Nanos]
Duration.ofDays(3).toHours() 72
Duration.ofDays(3).toMinutes() 4320
DDuration.ofDays(3).toMillis() 259200000
Duration.ofDays(3).plusDays(1) PT96H
Duration.ofDays(3).plusDays(-1) PT48H

Period Une classe immuable et thread-safe qui exprime la durée.

Obtenir l'instance résultat
Period.ofDays(2) P2D
Period.ofMonths(3) P3M
Period.ofYears(4) P4Y
Period.parse("P4Y") P4Y
Méthode régulière résultat
Period.ofYears(3).getDays() 0
Period.ofYears(3).getMonths() 0
Period.ofYears(3).getYears() 3
Period.ofYears(3).getUnits() [Years, Months, Days]
Period.ofDays(3).plusDays(1) P4D
Period.ofDays(3).minusDays(1) P2D

ZoneId Classe qui exprime le fuseau horaire

python


ZoneId.systemDefault();
ZoneId.getAvailableZoneIds();
ZoneId.of("Asia/Tokyo");

Conversion entre les classes de date et d'heure

Méthode de conversion Classe convertie
MonthDay.of(10, 1).atYear(2015) java.time.LocalDate
YearMonth.of(2015, 10).atDay(30) java.time.LocalDate
YearMonth.of(2015, 10).atEndOfMonth() java.time.LocalDate
LocalTime.now().atDate(LocalDate.now()) 2017-11-14T14:41:28.728
LocalDate.now().atTime(10, 20) java.time.LocalDateTime
LocalDate.now().atStartOfDay() java.time.LocalDateTime
LocalDate.now().atStartOfDay(ZoneId.of("Asia/Shanghai")) java.time.ZonedDateTime
LocalDateTime.now().atZone(ZoneId.of("Asia/Shanghai")) java.time.ZonedDateTime
LocalDateTime.now().toLocalDate() java.time.LocalDate
LocalDateTime.now().toLocalTime() java.time.LocalTime
LocalDateTime.now().toInstant(ZoneOffset.UTC) java.time.Instant
ZonedDateTime.now().toLocalDateTime() java.time.LocalDateTime
ZonedDateTime.now().toLocalDate() java.time.LocalDate
ZonedDateTime.now().toInstant() java.time.Instant
Instant.now().atZone(ZoneId.of("Asia/Shanghai")) java.time.ZonedDateTime
Instant.now().atOffset(ZoneOffset.UTC) java.time.OffsetDateTime

Format de la date et de l'heure

DateFormat Il est fourni par jdk1.0 ??, et le format est contrôlé par les deux éléments suivants.

  1. LONG,FULL,MEDIUM.SHORT
  2. Locale

N'allez-vous plus l'utiliser? !!

Génération et format d'instance&parse toString()
DateFormat.getDateInstance(DateFormat.FULL, Locale.JAPAN).format(new Date()) 14 novembre 2017
DateFormat.getTimeInstance(DateFormat.FULL, Locale.US).format(new Date()) 4:56:05 PM JST
DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.CHINA).format(new Date()) 2017-11-14 h 4:56
DateFormat.getDateInstance(DateFormat.FULL, Locale.JAPAN).parse("14 novembre 2017") Tue Nov 14 00:00:00 JST 2017
DateFormat.getTimeInstance(DateFormat.FULL, Locale.US).parse("4:52:25 PM JST") Thu Jan 01 16:52:25 JST 1970
DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.CHINA).parse("2017-11-14 h 4:52") Tue Nov 14 16:52:00 JST 2017

SimpleDateFormat C'est un formateur de date familier! !! Une sous-classe de DateFormmat qui détermine le format avec une chaîne de modèle.

Génération et format d'instance&parse toString()
new SimpleDateFormat("yyyy-MM-dd").format(new Date()) 2017-11-14
new SimpleDateFormat("aaaa année MM mois jj HH heure mm minute ss seconde").format(new Date()) 14 novembre 2017 17:24:11
new SimpleDateFormat("yyyy-MM-dd").parse("2017-11-14") Tue Nov 14 00:00:00 JST 2017

Le fuseau horaire peut être défini


SimpleDateFormat s1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
SimpleDateFormat s2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
s2.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
System.out.println(s1.format(new Date()));
System.out.println(s2.format(new Date()));

production


2017/11/14 17:26:53
2017/11/14 16:26:53

DateTimeFormatter Il a été ajouté à partir de JKD1.8 avec la classe de date et d'heure. C'est dans le paquet java.time.format, et c'est comme une combinaison de DateFormat et SimpleDateFormat?

format


DateTimeFormatter[] formatters = {
    DateTimeFormatter.ISO_DATE,
    DateTimeFormatter.ISO_LOCAL_DATE,
    DateTimeFormatter.ISO_LOCAL_DATE_TIME,
    DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.MEDIUM),
    DateTimeFormatter.ofPattern("Gyyyy/MM/dd HH::mm:ss.SSS")
};
LocalDateTime localDateTime = LocalDateTime.now();
Arrays.stream(formatters)
    .forEach(
        formatter ->
            System.out.println(formatter.format(localDateTime))
    );
Arrays.stream(formatters)
    .forEach(
        formatter ->
            System.out.println(localDateTime.format(formatter))
    );

parse


 //Date Heure#parse
 LocalDate.parse("2015/10/10", DateTimeFormatter.ofPattern("yyyy/MM/dd"));

 // DateTimeFormatter#parse
 DateTimeFormatter.ofPattern("yyyy/MM/dd").parse("2015/10/10");
 DateTimeFormatter.ofPattern("yyyy/MM/dd").parse("2015/10/10", TemporalQueries.localDate());

Du point de vue de la lisibilité, date time # parse est recommandé.

Recommended Posts

La date et l'heure de java8 ont été mises à jour
[Java] Comment régler la date sur 00:00:00
Quelles sont les fonctionnalités mises à jour de Java 13
[Java] Opérations de date / heure
Ressentez le passage du temps même à Java
J'ai essayé de traduire la grammaire de R et Java [Mis à jour de temps en temps]
Comparaison de vitesse au moment de la génération au moment de la conversion de la date
Qu'est-ce que la classe LocalDateTime? [Java débutant] -Date et classe d'heure-
[Rails 6] La durée de sauvegarde des images active_strage a été modifiée.
[Java] Utilisez ResolverStyle.LENIENT pour bien gérer la date et l'heure
[Java] Supprimer les éléments de la liste
[Édition Java] Histoire de la sérialisation
Gestion des fuseaux horaires avec Java
L'origine des expressions Java lambda
[Java1.8 +] Obtenez la date du jour × suivant avec LocalDate
Le concept de conception de l'API de date et d'heure de Java est intéressant
La relation entre la vérification stricte de la date Java et l'heure d'été
Obtenez le résultat de POST en Java
Vérifiez le contenu du magasin de certificats Java
Examiner l'utilisation de la mémoire des éléments Java
Introduction à Java pour la première fois # 2
[Java] Obtenez le jour d'un jour spécifique
Mémo: [Java] Vérifiez le contenu du répertoire
Explication des objets Ruby Time et Date
Comparer les éléments d'un tableau (Java)
[jour: 5] J'ai résumé les bases de Java
Java 8 pour démarrer maintenant ~ API de date et d'heure ~
Ceci et cela de la mise en œuvre du jugement en temps réel des dates en Java
Mesurez facilement la taille des objets Java
Retour sur les bases de Java
Comment obtenir la date avec Java
Sortie du livre "Introduction à Java"
Apprendre pour la première fois java [Introduction]
[Communication Socket (Java)] Impressions de la mise en œuvre de la communication Socket dans la pratique pour la première fois
L'histoire de l'écriture de Java dans Emacs
La méthode JacocoReportBase.setClassDirectories (FileCollection) est obsolète.
[Java] Vérifiez le nombre d'occurrences de caractères
[Java] [Spring] Tester le comportement de l'enregistreur
[Java] Obtenez la date avec la classe LocalDateTime
[Java] Obtenez et affichez la date 10 jours plus tard à l'aide de l'API Time ajoutée à partir de Java 8.
[Java] Calculer le jour à partir de la date (ne pas utiliser la classe Calendar)
Analyser en Java les chaînes de date et d'heure formatées par la fonction asctime du langage C
Mettre en forme la date et l'heure données par created_at
[Java] Gestion des Java Beans dans la chaîne de méthodes
L'histoire de la fabrication d'un Othello ordinaire à Java
[Android] [Java] Gérer l'état de CheckBox de ListView
À propos de l'idée des classes anonymes en Java
L'ordre des modificateurs de méthode Java est fixe
À propos du type de date / heure de la classe d'entité de Doma2
[Java] Réglez l'heure depuis le navigateur avec jsoup
Mesurer la taille d'un dossier avec Java
[Java] Obtenir la longueur de la chaîne de paire de substitution
[Java] La partie déroutante de String et StringBuilder
[Note] Java: mesure la vitesse de concaténation de chaînes
Définir l'heure de LocalDateTime à une heure spécifique
[Java] Faites attention au type de clé de la carte
Calculer le score de similarité des chaînes de caractères avec JAVA
[Java / Kotlin] Redimensionner en tenant compte de l'orientation de l'image
Utilisez une bibliothèque Java externe pour le moment