Вот несколько примеров 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/”