Java Language
Datum und Uhrzeit (java.time. *)
Suche…
Einfache Datumsmanipulationen
Holen Sie sich das aktuelle Datum.
LocalDate.now()
Holen Sie sich das Datum von gestern.
LocalDate y = LocalDate.now().minusDays(1);
Holen Sie sich das Datum von morgen
LocalDate t = LocalDate.now().plusDays(1);
Holen Sie sich ein bestimmtes Datum.
LocalDate t = LocalDate.of(1974, 6, 2, 8, 30, 0, 0);
Neben den plus
und minus
Methoden gibt es eine Reihe von "with" -Methoden, mit denen ein bestimmtes Feld in einer LocalDate
Instanz festgelegt werden kann.
LocalDate.now().withMonth(6);
Das obige Beispiel gibt eine neue Instanz mit dem Monat Juni zurück (dies unterscheidet sich von java.util.Date
wo setMonth
eine 0 wurde, die den 5. Juni bildet).
Da LocalDate-Manipulationen unveränderliche LocalDate-Instanzen zurückgeben, können diese Methoden auch miteinander verkettet werden.
LocalDate ld = LocalDate.now().plusDays(1).plusYears(1);
Dies würde uns das Datum von morgen in einem Jahr geben.
Datum und Uhrzeit
Datum und Uhrzeit ohne Zeitzonenangabe
LocalDateTime dateTime = LocalDateTime.of(2016, Month.JULY, 27, 8, 0);
LocalDateTime now = LocalDateTime.now();
LocalDateTime parsed = LocalDateTime.parse("2016-07-27T07:00:00");
Datum und Uhrzeit mit Zeitzoneninformationen
ZoneId zoneId = ZoneId.of("UTC+2");
ZonedDateTime dateTime = ZonedDateTime.of(2016, Month.JULY, 27, 7, 0, 0, 235, zoneId);
ZonedDateTime composition = ZonedDateTime.of(localDate, localTime, zoneId);
ZonedDateTime now = ZonedDateTime.now(); // Default time zone
ZonedDateTime parsed = ZonedDateTime.parse("2016-07-27T07:00:00+01:00[Europe/Stockholm]");
Datum und Uhrzeit mit Offset-Informationen (dh es werden keine Änderungen der Sommerzeit berücksichtigt)
ZoneOffset zoneOffset = ZoneOffset.ofHours(2);
OffsetDateTime dateTime = OffsetDateTime.of(2016, 7, 27, 7, 0, 0, 235, zoneOffset);
OffsetDateTime composition = OffsetDateTime.of(localDate, localTime, zoneOffset);
OffsetDateTime now = OffsetDateTime.now(); // Offset taken from the default ZoneId
OffsetDateTime parsed = OffsetDateTime.parse("2016-07-27T07:00:00+02:00");
Vorgänge nach Datum und Uhrzeit
LocalDate tomorrow = LocalDate.now().plusDays(1);
LocalDateTime anHourFromNow = LocalDateTime.now().plusHours(1);
Long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(LocalDate.now(), LocalDate.now().plusDays(3)); // 3
Duration duration = Duration.between(Instant.now(), ZonedDateTime.parse("2016-07-27T07:00:00+01:00[Europe/Stockholm]"))
Sofortig
Stellt einen Zeitpunkt dar. Kann als Wrapper für einen Unix-Zeitstempel betrachtet werden.
Instant now = Instant.now();
Instant epoch1 = Instant.ofEpochMilli(0);
Instant epoch2 = Instant.parse("1970-01-01T00:00:00Z");
java.time.temporal.ChronoUnit.MICROS.between(epoch1, epoch2); // 0
Verwendung verschiedener Klassen von Date Time API
Das folgende Beispiel enthält auch Erläuterungen, die zum Verständnis des Beispiels erforderlich sind.
import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.TimeZone;
public class SomeMethodsExamples {
/**
* Has the methods of the class {@link LocalDateTime}
*/
public static void checkLocalDateTime() {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("Local Date time using static now() method ::: >>> "
+ localDateTime);
LocalDateTime ldt1 = LocalDateTime.now(ZoneId.of(ZoneId.SHORT_IDS
.get("AET")));
System.out
.println("LOCAL TIME USING now(ZoneId zoneId) method ::: >>>>"
+ ldt1);
LocalDateTime ldt2 = LocalDateTime.now(Clock.system(ZoneId
.of(ZoneId.SHORT_IDS.get("PST"))));
System.out
.println("Local TIME USING now(Clock.system(ZoneId.of())) ::: >>>> "
+ ldt2);
System.out
.println("Following is a static map in ZoneId class which has mapping of short timezone names to their Actual timezone names");
System.out.println(ZoneId.SHORT_IDS);
}
/**
* This has the methods of the class {@link LocalDate}
*/
public static void checkLocalDate() {
LocalDate localDate = LocalDate.now();
System.out.println("Gives date without Time using now() method. >> "
+ localDate);
LocalDate localDate2 = LocalDate.now(ZoneId.of(ZoneId.SHORT_IDS
.get("ECT")));
System.out
.println("now() is overridden to take ZoneID as parametere using this we can get the same date under different timezones. >> "
+ localDate2);
}
/**
* This has the methods of abstract class {@link Clock}. Clock can be used
* for time which has time with {@link TimeZone}.
*/
public static void checkClock() {
Clock clock = Clock.systemUTC();
// Represents time according to ISO 8601
System.out.println("Time using Clock class : " + clock.instant());
}
/**
* This has the {@link Instant} class methods.
*/
public static void checkInstant() {
Instant instant = Instant.now();
System.out.println("Instant using now() method :: " + instant);
Instant ins1 = Instant.now(Clock.systemUTC());
System.out.println("Instants using now(Clock clock) :: " + ins1);
}
/**
* This class checks the methods of the {@link Duration} class.
*/
public static void checkDuration() {
// toString() converts the duration to PTnHnMnS format according to ISO
// 8601 standard. If a field is zero its ignored.
// P is the duration designator (historically called "period") placed at
// the start of the duration representation.
// Y is the year designator that follows the value for the number of
// years.
// M is the month designator that follows the value for the number of
// months.
// W is the week designator that follows the value for the number of
// weeks.
// D is the day designator that follows the value for the number of
// days.
// T is the time designator that precedes the time components of the
// representation.
// H is the hour designator that follows the value for the number of
// hours.
// M is the minute designator that follows the value for the number of
// minutes.
// S is the second designator that follows the value for the number of
// seconds.
System.out.println(Duration.ofDays(2));
}
/**
* Shows Local time without date. It doesn't store or represenet a date and
* time. Instead its a representation of Time like clock on the wall.
*/
public static void checkLocalTime() {
LocalTime localTime = LocalTime.now();
System.out.println("LocalTime :: " + localTime);
}
/**
* A date time with Time zone details in ISO-8601 standards.
*/
public static void checkZonedDateTime() {
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId
.of(ZoneId.SHORT_IDS.get("CST")));
System.out.println(zonedDateTime);
}
}
Date Time Formatierung
Vor Java 8 gab es im DateFormat
SimpleDateFormat
Klassen DateFormat
und SimpleDateFormat
Dieser ältere Code wird für java.text
weiter verwendet.
Java 8 bietet jedoch einen modernen Ansatz für die Verarbeitung von Formatierung und Analyse.
Beim Formatieren und Analysieren übergeben Sie zuerst ein String
Objekt an DateTimeFormatter
und verwenden es wiederum zum Formatieren oder Analysieren.
import java.time.*;
import java.time.format.*;
class DateTimeFormat
{
public static void main(String[] args) {
//Parsing
String pattern = "d-MM-yyyy HH:mm";
DateTimeFormatter dtF1 = DateTimeFormatter.ofPattern(pattern);
LocalDateTime ldp1 = LocalDateTime.parse("2014-03-25T01:30"), //Default format
ldp2 = LocalDateTime.parse("15-05-2016 13:55",dtF1); //Custom format
System.out.println(ldp1 + "\n" + ldp2); //Will be printed in Default format
//Formatting
DateTimeFormatter dtF2 = DateTimeFormatter.ofPattern("EEE d, MMMM, yyyy HH:mm");
DateTimeFormatter dtF3 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
LocalDateTime ldtf1 = LocalDateTime.now();
System.out.println(ldtf1.format(dtF2) +"\n"+ldtf1.format(dtF3));
}
}
Ein wichtiger Hinweis, anstatt benutzerdefinierte Muster zu verwenden, ist es ratsam, vordefinierte Formatierer zu verwenden. Ihr Code sieht klarer aus und die Verwendung von ISO8061 wird Ihnen definitiv auf lange Sicht helfen.
Differenz zwischen 2 LocalDates berechnen
Verwenden Sie LocalDate
und ChronoUnit
:
LocalDate d1 = LocalDate.of(2017, 5, 1);
LocalDate d2 = LocalDate.of(2017, 5, 18);
Da die Methode between
dem ChronoUnit
Enumerator 2 Temporal
Parameter als Parameter LocalDate
können Sie die LocalDate
Instanzen problemlos LocalDate
long days = ChronoUnit.DAYS.between(d1, d2);
System.out.println( days );