Анализ даты в Java с использованием SimpleDateFormat

#java #date #datetime #time #simpledateformat

#java #Дата #дата-время #время #simpledateformat

Вопрос:

Я хочу проанализировать дату в этом формате: «Ср. 26 авг. 2020 г. 11:26:46 GMT 0200» в дату. Но я не знаю, как это сделать. Я пробовал это:

 SimpleDateFormat parser = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss z");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date = parser.parse(split[0]); //error line
String formattedDate = formatter.format(date);
  

Я получаю эту ошибку: Неразрешимая дата: «Ср. 26 авг. 2020 г. 11: 26:46 GMT 0200». Мой формат даты неверен? И если да, может ли кто-нибудь указать мне правильное направление?

Комментарии:

1. Вы работаете в системе, языковой параметр локали которой не является английским? Потому что, если вы не предоставите своему SimpleDateFormat языковой стандарт, он получит и будет использовать языковой стандарт вашей системы по умолчанию, который может быть не английским, и поэтому не сможет проанализировать английские названия дней недели. Попробуйте использовать new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss z", Locale.ROOT); или Locale.ENGLISH и посмотрите, сохраняется ли ошибка

2. Я рекомендую вам не использовать SimpleDateFormat и Date . Эти классы плохо спроектированы и давно устарели, первый, в частности, заведомо хлопотный. Вместо этого используйте OffsetDateTime и DateTimeFormatter , оба из java.time, современного Java date and time API .

Ответ №1:

Я предлагаю вам прекратить использование устаревшего и подверженного ошибкам java.util API даты и времени и SimpleDateFormat . Переключитесь на современный java.time API даты и времени и соответствующий API форматирования ( java.time.format ). Узнайте больше о современном API для определения даты и времени из Trail: Date Time.

 import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        // Given date-time string
        String dateTimeStr = "Wed Aug 26 2020 11:26:46 GMT 0200";

        // Parse the given date-time string to OffsetDateTime
        OffsetDateTime odt = OffsetDateTime.parse(dateTimeStr,
                DateTimeFormatter.ofPattern("E MMM d u H:m:s zX", Locale.ENGLISH));

        // Display OffsetDateTime
        System.out.println(odt);
    }
}
  

Вывод:

 2020-08-26T11:26:46 02:00
  

Использование устаревшего API:

 import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Main {
    public static void main(String[] args) throws ParseException {
        // Given date-time string
        String dateTimeStr = "Wed Aug 26 2020 11:26:46 GMT 0200";

        // Define the formatter
        SimpleDateFormat parser = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'Z", Locale.ENGLISH);

        // Parse the given date-time string to java.util.Date
        Date date = parser.parse(dateTimeStr);
        System.out.println(date);
    }
}
  

Вывод:

 Wed Aug 26 10:26:46 BST 2020