2017-02-17 3 views
0

Как преобразовать строку в формат ISODate использованием SimpleDateFormat, что означает, что я хочу, чтобы, наконец, получить даты в java.util.Date формат.синтаксического анализа Строка «гггг-мм-ддTчч: мм: ss.SSSZ» ISODate Java

Моя строка будет выглядеть как 2017-02-17T09: 28: 03.000Z, я хочу преобразовать ее в дату formt. Я могу сделать это в формате даты в формате Joda, но поскольку я использую mongoDB, он не принимает формат joda.

String startDateString1 = "2017-02-17T04:23:17.452Z";  
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    Date startDate = df.parse(startDateString1); 
    String newDateString = df.format(startDate); 

код не работает.

+1

Какая у вас версия java? – Veeram

+0

Ваш часовой пояс всегда 'Z'? Если нет, то что еще может быть? –

+0

Java 8 'java.time' отлично подходит для дат и времени ISO. Мне кажется, что 'Instant.parse()' будет потреблять вашу строку без проблем. Если ваш драйвер MongoDB не принимает «Instant», преобразование в «Date» выполняется легко. –

ответ

0

Ваш код не работает, так как Z является зарезервированным символ, используемый для интерпретации RFC-822 часовых поясов:

RFC 822 часовой пояс: Для форматирования используется RFC 822 4-значный формат часовой пояс:

RFC822TimeZone: 
     Sign TwoDigitHours Minutes 
TwoDigitHours: 
     Digit Digit 

Поскольку Java 7, вы можете использовать X, чтобы интерпретировать ISO-8601 часовых поясов https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html. Следующие работы:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX"); 

Однако, на моем компьютере,

System.out.println(newDateString); 

приводит следующий вывод:

2017-02-17T05: 23: 17,452 + 01

В качестве альтернативы, если у вас есть только даты UTC, вы можете избежать буквы Z с помощью простой цитаты s:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 

А вот показанный результат:

2017-02-17T04: 23: 17.452Z

0

Вы можете использовать javax.xml.bind.DatatypeConverter.parseDateTime("2017-02-17T04:23:17.452Z"), который вернет объект «Календарь». Вы можете позвонить getTime(), чтобы получить объект Date.

2

Вы можете сделать это в Java 8, как показано ниже.

Instant instant = Instant.parse("2017-02-17T09:28:03.000Z"); 
Date date = Date.from(instant); 
+0

Новый JDBC-драйвер должен принять «Instant», не преобразовывая его в «Date» (не знаю, существует ли такой новый драйвер для MongoDB, и у него есть один) , –

+1

Я уже проверил. Я не думаю, что для MongoDB есть один. – Veeram

+0

Я использую JDK 1.7 – Yoga

Смежные вопросы