Java 8 LocalDateTime-Typkonvertierung (String, java.util.Date)
Datums- und Kalenderklassen wurden für Java-Datumstypen verwendet, es wird jedoch empfohlen, ab Java 8 LocalDateTime- / ZonedDateTime-Klassen usw. zu verwenden.
Dieses Mal hatte ich die Möglichkeit, die LocalDateTime-Klasse zu verwenden, also habe ich sie studiert. Es stellte sich heraus, dass es keine Methode gibt, die in einem Schuss konvertiert werden kann, und es ist nicht möglich, den Typ einfach zu konvertieren.
Dieses Mal habe ich String⇔LocalDateTime und java.util.Date⇔LocalDateTime auf meine eigene Weise organisiert.
String → LocalDateTime
Konvertieren Sie im Ablauf von String → SimpleDateFormat → Date → LocalDateTime.
public static LocalDateTime toLocalDateTime(String date, String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date formatDate = sdf.parse(date);
return LocalDateTime.ofInstant(formatDate.toInstant(), ZoneId.systemDefault());
}
Anwendungsbeispiel
public static void main(String args[]) {
//Ausführungsergebnis: 2018-05-07T00:00
System.out.println(toLocalDateTime("2018/05/07", "yyyy/MM/dd"));
}
Im Gegensatz zu SimpleDateFormat muss die DateTimeFormatter-Klasse nicht neu sein. Zum Zeitpunkt der Generierung muss das Datumsmuster mit der ofPattern-Methode ermittelt werden.
Konvertieren Sie im Ablauf von String → DateTimeFormatter → LocalDateTime. Kann kürzer sein als mit SimpleDateFormat.
public static LocalDateTime toLocalDateTime(String date, String format) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(date, dtf);
}
Anwendungsbeispiel
public static void main(String args[]) {
//Ausführungsergebnis: 2018-05-07T10:00
System.out.println(toLocalDateTime("2018/05/07 10:00:00","yyyy/MM/dd HH:mm:ss"));
}
Da es sich jedoch um eine LocalDateTime mit Datum und Uhrzeit handelt, tritt ein Fehler auf, wenn die Uhrzeit nicht angegeben wird.
public static void main(String args[]) {
//Ausführungsergebnis: DateTimeParseException
System.out.println(toLocalDateTime("2018/05/07","yyyy/MM/dd"));
}
Wenn Sie also nur das Datum benötigen, geben Sie LocalDate oder zurück
public static LocalDate toLocalDate(String date, String format) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
return LocalDate.parse(date, dtf);
}
Fügen Sie nach der Konvertierung in LocalDate 0 Uhr hinzu, um LocalDateTime zu erstellen.
public static LocalDateTime toLocalDateTime(String date, String format) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
return LocalDate.parse(date, dateTimeFormatter).atTime(LocalTime.MIN);
}
LocalDateTime → String ~~ Dies kann mit der Analysemethode in einem Schuss konvertiert werden. ~~ Es tut mir leid, es ist eine Lüge. Es kann mit der Formatmethode + DateTimeFormatter konvertiert werden.
public static String toStr(LocalDateTime localDateTime, String format) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
return localDateTime.format(dateTimeFormatter);
}
Anwendungsbeispiel
public static void main(String args[]) {
//Ausführungsergebnis: 2018/05/07
System.out.println(toStr(LocalDateTime.now(), "yyyy/MM/dd"));
}
LocalDateTime → java.util.Date Konvertieren Sie im Fluss von LocalDateTime → ZonedDateTime → Instant → java.util.Date.
public static Date toDate(LocalDateTime localDateTime) {
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zone);
Instant instant = zonedDateTime.toInstant();
return Date.from(instant);
}
Anwendungsbeispiel
public static void main(String args[]) {
//Ausführungsergebnis: Mo 07. Mai 19:59:32 JST 2018
System.out.println(toDate(LocalDateTime.now()));
}
java.util.Date → LocalDateTime
Konvertieren Sie im Ablauf von Datum → Sofort → Lokales Datum Uhrzeit.
public static LocalDateTime toLocalDateTime(Date date) {
Instant instant = date.toInstant();
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
}
Anwendungsbeispiel
public static void main(String args[]) {
// 2018-05-07T19:59:32.139
System.out.println(toLocalDateTime(new Date()));
}
LocalDateTime ist schwer zu handhaben. (Kleines Gefühl) Es ist möglicherweise besser, LocalDate und LocalTime ordnungsgemäß zu verwenden. Die Variablen werden aus Gründen der Klarheit (für mich) zeilenweise deklariert, aber natürlich ist es besser, alles in der einen Zeile zu tun, die Sie mir in den Kommentaren gesagt haben.
public static void main(String args[]) {
// String→LocalDateTime
System.out.println(LocalDate.parse("2018/05/07",
DateTimeFormatter.ofPattern("uuuu/MM/dd"))
.atTime(LocalTime.MIN));
}
Ich habe den Unterschied zwischen SimpleDateFormat und DateTimeFormatter nicht vollständig verstanden, daher werde ich ihn später untersuchen.
Recommended Posts