Подтвердить что ты не робот

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)
4b9b3361

Ответ 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;
  }

Я не знаю, будет ли он по-прежнему полезен для вас, но сейчас я сталкиваюсь с той же проблемой, и после немногого я придумал это.