Как мне проанализировать строку даты с помощью DateFormat?

#android #date-format #simpledateformat

#Android #формат даты #simpledateformat

Вопрос:

У меня есть строка даты в следующем формате:

Thu Oct 20 14:39:19 PST 2011

Я хотел бы проанализировать ее с помощью DateFormat, чтобы получить объект Date. Я пытаюсь сделать это так:

 DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT);
Date date = df.parse(dateString);
  

Это дает исключение ParseException («неразличимая дата»).

Я также пробовал это:

 SimpleDateFormat df = new SimpleDateFormat("EEE-MMM-dd HH:mm:ss z yyyy");
  

с теми же результатами.

Это правильная SimpleDateFormat строка? Есть ли лучший способ проанализировать эту дату?

Ответ №1:

Вы уверены, что этой строке даты действительно присваивается значение Thu Oct 20 14:39:19 PST 2011 ? Если это не проблема, вы можете попробовать использовать этот код, который работает для меня:

 import java.text.SimpleDateFormat;
import java.util.Date;
public class Test{


  public static void main(String args[]){

    String toParse = "Thu Oct 20 14:39:19 PST 2011";

    String format = "EEE MMM dd HH:mm:ss z yyyy";
    SimpleDateFormat formater = new SimpleDateFormat(format);
    try{
      Date parsed = formater.parse(toParse);
    } catch(Exception e){
      System.out.println(e.getMessage());
    }

  }
}
  

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

1. Да, я попытался жестко запрограммировать ее в своем коде и получил тот же результат.

2. Я не знаю, что сказать. Копирование и вставка вашего кода дает мне исключение даты, которое невозможно исправить.

3. Попробуйте очистить свою сборку, а затем перекомпилировать.

4. Для «Уровня соответствия компилятору» установлено значение 1.6. Тестирование на устройстве под управлением Android 2.1

5. Вам лучше установить значение 1.5, Android использует API 1.6 начиная с 2.3.

Ответ №2:

Проблема заключалась в том, что я пытался проанализировать английскую дату, находясь во французском языке.

Это было решено с помощью этого:

SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.CANADA);

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

1. @howettl: Я рад, что вы решили эту проблему, 1, потому что вы точно сообщили о сложной ситуации. Я пишу это только потому, что никто, похоже, явно не указывал на это. В вашем исходном коде у вас были тире между компонентами формата: EEE-MM-dd . Вероятно, это была неправильная строка, если вы намеревались проанализировать дату без тире. Однако вы пробовали версии, предложенные Kurtis Nusbaum и HandlerExploit, без тире и без явной передачи локали. КАНАДА, и это все равно не сработало. Так что, похоже, это действительно был обязательный параметр.

Ответ №3:

Попробуйте это:

 SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
  

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

1. Я жестко запрограммировал строку даты вместо того, чтобы брать ее из базы данных, и выполнил синтаксический анализ жестко запрограммированной строки. Это привело к исключению даты, которое невозможно исправить.