Java SimpleDateFormat
в Java, как разбирать строку даты, содержащую букву, которая не представляет шаблон?
"2007-11-02T14:46:03+01:00"
String date ="2007-11-02T14:46:03+01:00";
String format = "yyyy-MM-ddTHH:mm:ssz";
new SimpleDateFormat(format).parse(date);
Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern character 'T'
at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:769)
at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:576)
at java.text.SimpleDateFormat.(SimpleDateFormat.java:501)
at java.text.SimpleDateFormat.(SimpleDateFormat.java:476)
Ответы
Ответ 1
Время, которое вы пытаетесь выполнить, похоже, находится в формате ISO 8601. SimpleDateFormat
, к сожалению, не поддерживает все те же спецификации времени, что и ISO 8601. Если вы хотите иметь возможность правильно обрабатывать все формы, указанные в ISO, лучше всего использовать Joda time.
Этот пример прямо из руководства :
DateTime dt = new DateTime("2004-12-13T21:39:45.618-08:00");
Ответ 2
Вы можете попробовать
String format = "yyyy-MM-dd'T'HH:mm:ssz";
Ссылка: из Javadoc
Текст может быть указан с использованием одинарных кавычек ('), чтобы избежать интерпретации.
Ответ 3
String testDate = "2007-11-02T14:46:03+01:00";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");
Date date = formatter.parse(testDate);
System.out.println(date);
Вы можете попробовать аналогично описанному выше
Вы можете использовать следующую ссылку для ссылки
Ответ 4
Если вам не нужен часовой пояс, вы можете использовать этот метод.
public static Date convertToDate(String strDate) throws ParseException {
Date date = null;
if (strDate != null) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
date = sdf.parse(strDate);
}
return date;
}
Я не знаю, будет ли он по-прежнему полезен для вас, но сейчас я сталкиваюсь с той же проблемой, и после немногого я придумал это.