Das Datum und die Uhrzeit von java8 wurden aktualisiert

Datums- und Zeitklasse vor JDK1.8

Date Es ist eine Datums- und Zeitklasse, die von jdk1.0 bereitgestellt wird und Millisekunden aus der Epoche enthält. "GMT 1. Januar 1970 00:00 bis zur heutigen Millisekunde" Die meisten Methoden sind aufgrund von Y2k-Problemen und Leistungsproblemen veraltet (@Deprecated).

Überlebende Auftragnehmer und Methoden


//Generieren
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());

Datum y2k Problem

y2k Problem


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

⇒ Es wird der 1. Januar 1910 sein.

Date.java


public Date(int year, int month, int date, int hrs, int min, int sec) {
   int y = year + 1900; // <-Hier
   //Abkürzung
}

Calendar Eine Klasse, die den Fehler von Date.java verbessert und einen Kalender darstellt, wie der Name schon sagt.

  1. Die Kalenderklasse enthält Felder für Jahr, Monat, Tag, Stunde, Minute, Sekunde und Millisekunde. protected int fields[];

  2. Eine abstrakte Klasse, implementiert mit dem Muster __ (wahrscheinlich) __Tmeplate Method, Durch die Implementierung von Unterklassen werden die Unterschiede in den weltweit verwendeten Kalendern ausgeglichen. Beispiel: Japanischer Kalender, Mondkalender

Kalender-Kern-API

API Überblick
Calendar Vom Kalender(abstrakt)Übergeordnete Klasse
TimeZone Repräsentiert die Zeitzone
Locale Stellt eine Region dar und erzeugt verschiedene Kalender

Kalendergenerierung

Zur Ausstellung


private static void show(Calendar cal) {
    System.out.println("Generierter Kalender: " + cal.getClass().getName());
    System.out.println(
        cal.get(Calendar.YEAR) + "Jahr"
        + (cal.get(Calendar.MONTH) + 1) + "Mond"
        + cal.get(Calendar.DAY_OF_MONTH) + "Tag"
        + cal.get(Calendar.HOUR_OF_DAY) + "Zeit"
        + cal.get(Calendar.MINUTE) + "Protokoll"
        + cal.get(Calendar.SECOND) + "Sekunden");
}

Generieren


Kalender Standardkalender= Calendar.getInstance();
show(Standardkalender);

Kalender Japanischer Kalender_Standardzeitzone= Calendar.getInstance(new Locale("ja", "JP", "JP"));
show(Japanischer Kalender_Standardzeitzone);

Kalender Standardregion_JST = Calendar.getInstance(TimeZone.getTimeZone("JST"));
show(Standardbereich_JST);

Kalender Japanischer Kalender_GMT = Calendar.getInstance(TimeZone.getTimeZone("GMT"), new Locale("ja", "JP", "JP"));
show(Japanischer Kalender_GMT);

Ausgabe


Generierter Kalender: java.util.GregorianCalendar
13. November 2017 12:20:00
Generierter Kalender: java.util.JapaneseImperialCalendar
13. November 2017 12:20:00
Generierter Kalender: java.util.GregorianCalendar
13. November 2017 12:20:00
Generierter Kalender: java.util.JapaneseImperialCalendar
13. November 2017 3:20:00
  1. GregorianCalendar, generiert in der Standardregion
  2. JapaneseImperialCalendar, generiert durch Erstellen der Region Japan Japanese-Calendar.PNG

Calendar <=> Date

Calendar,Datumskonvertierung


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

Unterschied zwischen add () und roll ()

Sowohl add () als auch roll () dienen zum Erhöhen / Verringern des angegebenen Feldes (Jahr / Monat / Tag / Stunde / Minute / Sekunde / Millisekunde).

oben Niedriger
add() Ändern Sie die Oberseite Minimale Änderung
roll() Ändern Sie nicht die Oberseite Minimale Änderung

add()


Calendar calendar = Calendar.getInstance();
calendar.set(2015, Calendar.NOVEMBER,  30);
System.out.println("Ursprünglicher Wert: " + formatter.format(calendar.getTime()));

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

__2015 / 11 / 30-> Monat hinzufügen + 3-> 2016/2/29 __

roll()


Calendar calendar = Calendar.getInstance();
calendar.set(2015, Calendar.NOVEMBER,  30);
System.out.println("Ursprünglicher Wert: " + formatter.format(calendar.getTime()));

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

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

Nachsicht & Verzögerung

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

Ausgabe


2016/05/02
Exception in thread "main" java.lang.IllegalArgumentException: MONTH
  1. Die Standardeinstellung von Lenient ist "true". Erlauben Sie daher "2015/15 / 32-> 2016/05/02"
  2. Lenient = false erlaubt keinen Monat = 15
  3. __ Die Ausnahme wird durch get () anstelle von set ausgelöst. __ __ __set () wird verzögert, um unnötige Berechnungen zu vermeiden. __ __

JDK 1.8 Datums- und Zeitklasse

__ Das Hauptthema! !! __ __ Dem Paket "java.time" von JKD1.8 wurden viele Datums- und Zeitklassen hinzugefügt.

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

Kern-API

Kern-API für Datum und Uhrzeit Überblick
TemporalAccessor Bis heute, Uhrzeit, Versatz oder eine beliebige Kombination davon usw.SchreibgeschütztEine Schnittstelle, die den Zugriff definiert.
Temporal Bis heute, Uhrzeit, Versatz oder eine beliebige Kombination davon usw.Lesen/schreibenEine Schnittstelle, die den Zugriff definiert.
TemporalAmount __Zeitraum__Ist die Schnittstelle, die definiert.
TemporalField __Terminzeit__Eine Schnittstelle, die die Felder von definiert.
TemporalUnit __Datum Zeiteinheit__Funktionsschnittstelle, die definiert.
TemporalAdjuster __Strategie zur Anpassung von Datum und Uhrzeit__Funktionsschnittstelle zur Bereitstellung.
TemporalQuery __Strategie für den Zugriff auf Datum und Uhrzeit__Funktionsschnittstelle zur Bereitstellung.

TemporalAccessor

TemporalAccessor-Methode Ergebnis
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. Holen Sie sich die Instanz mit LocalDate, die TemporalAccessor implementiert.
  2. Holen Sie sich das Feld "Jahr", indem Sie es im "ChronoField" verwenden, das TemporalField implementiert.
  3. TemporalQuery-Implementierung Verwenden Sie die zurückgegebene "TemporalQueries.zoneId ()", um die "Genauigkeit" zu erhalten.

Temporal Temporal erbt von TemporalAccessor und fügt eine Schreibschnittstelle hinzu.

Zeitliche Methode Ergebnis
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 und Subtraktion mit "Periode", die den zeitlichen Betrag implementiert.
  2. Addition und Subtraktion werden von ChronoUnit addiert und subtrahiert, das TemporalUnit implementiert.
  3. Passen Sie das Feld "Jahr" mit dem "ChronoField" an, das TemporalField implementiert.
  4. LocalDate.of (2010, 1, 10) in temporal.with (LocalDate.of (2010, 1, 10)) wird in Temporal Adjuster umgewandelt.

TemporalAmount

TemporalAmount-Methode Ergebnis
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. Holen Sie sich eine "Instanz" mit "Dauer", die den zeitlichen Betrag implementiert.
  2. Holen Sie sich den Wert mit ChronoUnit, das TemporalUnit implementiert.

TemporalField

TemporalField-Methode Ergebnis
TemporalField year = ChronoField.YEAR Year
year.range() -999999999 - 999999999
year.getBaseUnit() Years
year.getDisplayName(Locale.JAPAN) Jahr
year.getFrom(LocalDate.of(2011, 1, 10)) 2011
year.getRangeUnit() Forever
year.isDateBased() true
year.isTimeBased() false

Ich erhalte eine Instanz mit "ChronoField", die TemporalField implementiert.

TemporalUnit

TemporalUnit-Methode Ergebnis
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

TemporalAdjuster-Methode Ergebnis
TemporalAdjuster adjuster = LocalDate.of(2011, 1, 1) 2011-01-01
adjuster.adjustInto(LocalDate.of(9999, 10, 1)) 2011-01-01

Temporal Adjusters bietet eine Vielzahl von Zeitanpassungsstrategien.

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

TemporalQuery, TemporalQueries

Beispiel: Wie viele Tage bleiben bis zum Jahresende?

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

Temporal Queries bietet eine Vielzahl von Zugriffsstrategien. Beispiel: Wie genau ist das Objekt?

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

Implementierung von Datum und Uhrzeit

Instant

  1. Klasse __Invariant & Thread Safe __, die Epochensekunden darstellt (verstrichene Zeit von 1970-01-01T00: 00: 00Z).
  2. Halten Sie bis zu Nanosekunden.
  3. Es erbt Temporal und TemporalAdjuster.
Bekomme Instanz 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
Regelmäßige Methode Ergebnis
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 __ Keine Zeitzone Eine unveränderliche und threadsichere Klasse, die das Datum __ (JJJJ-MM-TT) darstellt. Es kann für Geburtstage verwendet werden.

Bekomme Instanz 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
Regelmäßige Methode 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 __ Eine unveränderliche und thread-sichere Klasse, die keine Zeitzone darstellt __ (HH: mm: ss.SSSSSSSSS).

Bekomme Instanz 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
Regelmäßige Methode 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 Es hat LocalDate und LocalTime intern, __ Keine Zeitzone Datum Uhrzeit __ (JJJJ-MM-TT HH: mm: ss.SSSSSSSSS) ist eine unveränderliche und threadsichere Klasse.

LocalDataTime.java


/**
 * The date part.
 */
private final LocalDate date;
/**
 * The time part.
 */
private final LocalTime time;
Bekomme Instanz 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
Regelmäßige Methode 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 __ Eine unveränderliche und thread-sichere Klasse, die __ (HH: mm: ss.SSSSSSSSS) mit Zeitzone darstellt. Die grundlegende Verwendung scheint mit LocalTimeDate identisch zu sein.

Bekomme Instanz 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]
Regelmäßige Methode 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 Es ist eine Kombination aus LocalDateTime und Offset.

https://docs.oracle.com/javase/jp/8/docs/api/java/time/OffsetDateTime.html "OffsetDateTime, ZonedDateTime und Instant speichern alle Zeitpunkte in Zeitreihen mit einer Genauigkeit von Nanosekunden. Instant ist der einfachste und stellt einfach den Moment dar. OffsetDateTime fügt den Offset von UTC / Greenwich zum Moment hinzu. Außerdem können Sie das lokale Datum und die lokale Uhrzeit abrufen. ZonedDateTime fügt eine vollständige Zeitzonenregel hinzu. "

OffsetDateTime.java


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

YearMonth、MonthDay

YearMonth: Eine unveränderliche und thread-sichere Klasse, die "JJJJ-MM" darstellt. MonthDay: Eine unveränderliche und thread-sichere Klasse, die "mm-dd" darstellt.

Holen Sie sich die YearMonth-Instanz 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
YearMonth reguläre Methode 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
Holen Sie sich die MonthDay-Instanz 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
MonthDay reguläre Methode 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 Jahr: Eine unveränderliche und thread-sichere Klasse, die "JJJJ" darstellt.

Bekomme Instanz toString()
Year.now() 2017
Year.now(Clock.systemUTC()) 2017
Year.now(ZoneId.of("Europe/Paris")) 2017
Year.of(2011) 2011
Year.parse("2012") 2012
Regelmäßige Methode toString()
Year.of(2011).getValue() 2011
Year.of(2011).plusYears(3) 2014
Year.of(2011).minusYears(10) 2001

Month、DayOfWeek Monat, eine Aufzählung, die den Monat darstellt DayOfWeek, eine Aufzählung von Tagen

Monatsinstanz abrufen toString()
Month.of(10) OCTOBER
Month.valueOf("JANUARY") JANUARY
Month.FEBRUARY FEBRUARY
Monat reguläre Methode toString()
Month.of(1).getValue() 1
Month.of(12).plus(3) MARCH
Month.of(3).minus(4) NOVEMBER
Holen Sie sich die DayOfWeek-Instanz toString()
DayOfWeek.of(1) MONDAY
DayOfWeek.valueOf("FRIDAY") FRIDAY
DayOfWeek.FRIDAY FRIDAY
DayOfWeek reguläre Methode toString()
DayOfWeek.of(1).getValue() 1
DayOfWeek.of(1).plus(7) MONDAY
DayOfWeek.of(1).minus(7) MONDAY

Clock __ Eine Klasse, die die Systemzeit __ mit einer Zeitzone darstellt. Die Datums- und Zeitklasse now () wird basierend auf dieser Uhr generiert.

Uhr holen

Clock clockDefault = Clock.systemDefaultZone();  

defalut-clock-1.gif

UTC Uhr


Clock clockUTC = Clock.systemUTC();  

UTC-Clock2.gif

Zeitzonenbezeichnung Uhr


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

clock-paris.gif

Die Uhr ist eine Uhr, also schreitet die Zeit voran

Die Zeit schreitet voran


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

Holen Sie sich eine besondere Uhr

Uhr, die gestoppt ist


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

Ergebnis


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

__⇒ Die Uhr läuft nicht vor. __ __

Zweite Uhr


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

Ergebnis


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

__ ⇒ Halten Sie in Sekunden nicht weniger als Sekunden __

Minutenuhr


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

Ergebnis


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

__ ⇒ Minuten, nicht weniger als Sekunden halten __

Uhr um die angegebene Zeit vorgerückt


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

Ergebnis


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

__⇒ Uhr einen Tag voraus __

TemporalAmount Duration Eine unveränderliche und thread-sichere Klasse, die die Zeitdauer ausdrückt.

Bekomme Instanz Ergebnis
Duration.ofDays(2) PT48H
Duration.ofHours(3) PT3H
Duration.ofMinutes(40) PT40M
Duration.parse("PT15M") PT15M
Regelmäßige Methode Ergebnis
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 Eine unveränderliche und thread-sichere Klasse, die die Zeitdauer ausdrückt.

Bekomme Instanz Ergebnis
Period.ofDays(2) P2D
Period.ofMonths(3) P3M
Period.ofYears(4) P4Y
Period.parse("P4Y") P4Y
Regelmäßige Methode Ergebnis
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 Klasse, die die Zeitzone ausdrückt

python


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

Umrechnung zwischen Datums- und Zeitklassen

Konvertierungsmethode Konvertierte Klasse
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

Datum Uhrzeit Format

DateFormat Es wird von jdk1.0 ?? bereitgestellt und das Format wird durch die folgenden zwei Elemente gesteuert.

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

Willst du es nicht mehr benutzen? !!

Instanzgenerierung & Format&parse toString()
DateFormat.getDateInstance(DateFormat.FULL, Locale.JAPAN).format(new Date()) 14. November 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 Uhr 4:56
DateFormat.getDateInstance(DateFormat.FULL, Locale.JAPAN).parse("14. November 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 Uhr 4:52") Tue Nov 14 16:52:00 JST 2017

SimpleDateFormat Es ist ein bekannter Datumsformatierer! !! Eine Unterklasse von DateFormmat, die das Format mit einer Musterzeichenfolge bestimmt.

Instanzgenerierung & Format&parse toString()
new SimpleDateFormat("yyyy-MM-dd").format(new Date()) 2017-11-14
new SimpleDateFormat("JJJJ Jahr MM Monat TT HH Stunde mm Minute SS Sekunde").format(new Date()) 14. November 2017, 17:24:11 Uhr
new SimpleDateFormat("yyyy-MM-dd").parse("2017-11-14") Tue Nov 14 00:00:00 JST 2017

Zeitzone kann eingestellt werden


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

Ausgabe


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

DateTimeFormatter Es wurde ab JKD1.8 zusammen mit der Datums- und Zeitklasse hinzugefügt. Es befindet sich im Paket "java.time.format" und ist wie eine Kombination aus DateFormat und 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


 //Terminzeit#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());

Unter dem Gesichtspunkt der Lesbarkeit wird "Datum / Uhrzeit # Analyse" empfohlen.

Recommended Posts

Das Datum und die Uhrzeit von java8 wurden aktualisiert
[Java] So stellen Sie die Datums- und Uhrzeit auf 00:00:00 ein
Was sind die aktualisierten Funktionen von Java 13
[Java] Datums- / Zeitoperationen
Spüren Sie den Lauf der Zeit auch in Java
Ich habe versucht, die Grammatik von R und Java zu übersetzen [Von Zeit zu Zeit aktualisiert]
Geschwindigkeitsvergleich zum Zeitpunkt der Generierung zum Zeitpunkt der Datumskonvertierung
Was ist die LocalDateTime-Klasse? [Java-Anfänger] -Datum und Zeitklasse-
[Rails 6] Das Speicher-Timing von active_strage-Bildern wurde geändert.
[Java] Verwenden Sie ResolverStyle.LENIENT, um Datum und Uhrzeit gut zu handhaben
[Java] Löschen Sie die Elemente von List
[Java Edition] Geschichte der Serialisierung
Umgang mit Zeitzonen mit Java
Der Ursprung von Java-Lambda-Ausdrücken
[Java1.8 +] Mit LocalDate das Datum des nächsten × Tages abrufen
Das Designkonzept der Datums- und Uhrzeit-API von Java ist interessant
Die Beziehung zwischen strenger Java-Datumsprüfung und Sommerzeit
Holen Sie sich das Ergebnis von POST in Java
Überprüfen Sie den Inhalt des Java-Zertifikatspeichers
Untersuchen Sie die Speichernutzung von Java-Elementen
Einführung in Java zum ersten Mal # 2
[Java] Ermittelt den Tag eines bestimmten Tages
Anmerkung: [Java] Überprüfen Sie den Inhalt des Verzeichnisses
Erläuterung der Ruby Time- und Date-Objekte
Vergleichen Sie Elemente eines Arrays (Java)
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
Java 8 startet jetzt ~ Datums- und Uhrzeit-API ~
Dies und das der Implementierung der zeitlichen Beurteilung von Daten in Java
Messen Sie einfach die Größe von Java-Objekten
Rückblick auf die Grundlagen von Java
So erhalten Sie das Datum mit Java
Ausgabe des Buches "Einführung in Java"
Zum ersten Mal Java lernen [Einführung]
[Socket-Kommunikation (Java)] Eindrücke von der erstmaligen Implementierung der Socket-Kommunikation in der Praxis
Die Geschichte des Schreibens von Java in Emacs
Die Methode JacocoReportBase.setClassDirectories (FileCollection) ist veraltet.
[Java] Überprüfen Sie die Anzahl der Zeichen
[Java] [Spring] Testen Sie das Verhalten des Loggers
[Java] Ermitteln Sie das Datum mit der LocalDateTime-Klasse
[Java] Abrufen und Anzeigen des Datums 10 Tage später mithilfe der von Java 8 hinzugefügten Zeit-API.
[Java] Tag ab Datum berechnen (Kalenderklasse nicht verwenden)
Analysieren Sie die Datums- und Zeitzeichenfolge, die von der asctime-Funktion der C-Sprache in Java formatiert wurde
Formatieren Sie das von created_at angegebene Datum und die Uhrzeit
[Java] Behandlung von Java Beans in der Methodenkette
Die Geschichte eines gewöhnlichen Othello in Java
[Android] [Java] Verwalten Sie den Status der CheckBox von ListView
Über die Idee anonymer Klassen in Java
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Informationen zum Datums- / Uhrzeittyp der Entitätsklasse von Doma2
[Java] Stellen Sie die Zeit im Browser mit jsoup ein
Messen Sie die Größe eines Ordners mit Java
[Java] Ermittelt die Länge der Ersatzpaarzeichenfolge
[Java] Der verwirrende Teil von String und StringBuilder
[Hinweis] Java: Messen Sie die Geschwindigkeit der Zeichenfolgenverkettung
Stellen Sie die Zeit von LocalDateTime auf eine bestimmte Zeit ein
[Java] Achten Sie auf den Schlüsseltyp der Karte
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
[Java / Kotlin] Ändern Sie die Größe unter Berücksichtigung der Ausrichtung des Bildes
Verwenden Sie vorerst eine externe Java-Bibliothek