Как анализировать дату в Date?

Как выполнить синтаксический анализ строки даты ниже в Date?

String target = "Thu Sep 28 20:29:30 JST 2000";
DateFormat df = new SimpleDateFormat("E MM dd kk:mm:ss z yyyy");
Date result =  df.parse(target);  

Выдает исключение...

java.text.ParseException: Unparseable date: "Thu Sep 28 20:29:30 JST 2000"
        at java.text.DateFormat.parse(DateFormat.java:337)

Ответ 1

Образец неправильный. У вас есть аббревиатура 3-х дневного дня, поэтому она должна быть EEE. У вас есть аббревиатура с 3-мя символами, поэтому она должна быть MMM. Поскольку эти аббревиатуры в дневное и месячное время чувствительны к локали, вы должны явно указать язык SimpleDateFormat на английский язык, а в противном случае он будет использовать языковой стандарт платформы по умолчанию, который может быть не сам по себе.

public static void main(String[] args) throws Exception {
    String target = "Thu Sep 28 20:29:30 JST 2000";
    DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy", Locale.ENGLISH);
    Date result =  df.parse(target);  
    System.out.println(result);
}

Здесь печатается

Thu Sep 28 07:29:30 BOT 2000

который является правильным в соответствии с моим часовым поясом.

Я также передумал бы, если бы вы не хотели использовать HH вместо kk. Подробнее о действительных шаблонах читайте javadoc.

Ответ 2

Вот рабочий пример:

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

public class j4496359 {
    public static void main(String[] args) {
        try {
            String target = "Thu Sep 28 20:29:30 JST 2000";
            DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss zzz yyyy");
            Date result =  df.parse(target);
            System.out.println(result); 
        } catch (ParseException pe) {
            pe.printStackTrace();
        }
    }
}

Будет напечатан:

Thu Sep 28 13:29:30 CEST 2000

Ответ 3

String target = "27-09-1991 20:29:30";
DateFormat df = new SimpleDateFormat("dd MM yyyy HH:mm:ss");
Date result =  df.parse(target);
System.out.println(result); 

Это прекрасно работает?

Ответ 4

new SimpleDateFormat("EEE MMM dd kk:mm:ss ZZZ yyyy");

и

new SimpleDateFormat("EEE MMM dd kk:mm:ss Z yyyy");

все еще работает. Однако, если ваш код генерирует исключение, это потому, что ваш инструмент или jdk или любая другая причина. Поскольку я получил ту же ошибку в моей среде IDE, но, пожалуйста, проверьте http://ideone.com/Y2cRr (онлайн-идея) с ZZZ и Z

: Thu Sep 28 11:29:30 GMT 2000

Ответ 5

У меня была эта проблема, и я установил Locale в US, тогда она работает.

static DateFormat visitTimeFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy",Locale.US);

для String "Sun Jul 08 00:06:30 UTC 2012"

Ответ 6

Исключение синтаксического анализа - это проверенное исключение, поэтому вы должны поймать его с помощью try-catch при работе с синтаксическим анализом строк с датами, поскольку @miku предложил...