Рубрики
Без рубрики

Java 8 – Как анализировать дату с помощью LocalDateTime

– Java 8 – Как анализировать дату с помощью LocalDateTime

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

Рекомендации

Оригинал: “https://mkyong.com/java8/java-8-how-to-parse-date-with-localdatetime/”