Вот несколько примеров Java 8 для анализа даты с помощью LocalDateTime
.
Во-первых, найдите Преобразователь даты и времени
шаблон , соответствующий формату даты, например:
String str = "2020-01-30 12:30:41"; DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
во-вторых, проанализируйте его с помощью LocalDateTime.parse
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String str = "2020-01-30 12:30:41"; LocalDateTime localDateTime = LocalDateTime.parse(str, dtf);
1. 2020-01-30 12:30:41
package com.mkyong.time; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class JavaDateTimeExample1 { public static void main(String[] args) { String str = "2020-01-30 12:30:41"; DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // String -> LocalDateTime LocalDateTime localDateTime = LocalDateTime.parse(str, dtf); // LocalDateTime -> String String result = localDateTime.format(dtf); System.out.println(result); } }
Выход
2020-01-30 12:30:41
2. 31-Авг-2020
2.1 По умолчанию, DateTimeFormatter
будет использовать языковой стандарт JVM по умолчанию для анализа даты. В этом примере -Aug-
является английским словом, если локаль JVM по умолчанию – US, все в порядке.
package com.mkyong.time; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class JavaDateTimeExample2 { public static void main(String[] args) { // default jvm locale System.out.println(Locale.getDefault()); //en_US String str = "31-Aug-2020"; DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d-MMM-yyyy"); // String -> LocalDateTime LocalDateTime localDateTime = LocalDate.parse(str, dtf).atStartOfDay(); // LocalDateTime -> String String result = localDateTime.format(dtf); System.out.println(result); } }
Выход
en_US 31-Aug-2020
2.2 Теперь исключение DateTimeParseException
будет вызвано, если мы изменим локаль JVM по умолчанию на КИТАЙ
.
Locale.setDefault(Locale.CHINA); String str = "31-Aug-2020"; DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d-MMM-yyyy"); LocalDateTime localDateTime = LocalDate.parse(str, dtf).atStartOfDay();
Выход
Exception in thread "main" java.time.format.DateTimeParseException: Text '31-Aug-2020' could not be parsed at index 3 at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046) at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948) at java.base/java.time.LocalDate.parse(LocalDate.java:428)
Чтобы решить эту проблему, определите правильную локаль в Преобразователь даты и времени
.
package com.mkyong.time; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; public class JavaDateTimeExample3 { public static void main(String[] args) { Locale.setDefault(Locale.CHINA); String str = "31-Aug-2020"; // don't care about the JVM default locale, we use Locale.US to parse date DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d-MMM-yyyy", Locale.US); // String -> LocalDateTime LocalDateTime localDateTime = LocalDate.parse(str, dtf).atStartOfDay(); // LocalDateTime -> String String result = localDateTime.format(dtf); System.out.println(result); } }
Выход
31-Aug-2020
Рекомендации
- Форматирование даты и времени javadoc
- Локальное время javadoc
- Как изменить языковой стандарт JVM по умолчанию?
- Java 8 – Как преобразовать строку в LocalDate
- Java 8 – Как отформатировать LocalDateTime
Оригинал: “https://mkyong.com/java8/java-8-how-to-parse-date-with-localdatetime/”