#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. Я жестко запрограммировал строку даты вместо того, чтобы брать ее из базы данных, и выполнил синтаксический анализ жестко запрограммированной строки. Это привело к исключению даты, которое невозможно исправить.