2016-07-09 3 views
3

У меня есть эта дата:Как обрабатывать часовую зону с одинарной цифрой? "Ср 31 декабря 00:00:00 GMT-8 1969"

"Wed Dec 31 00:00:00 GMT-8 1969" 

Но это не может быть проанализирован с этим SimpleDateFormat:

new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy"); 

Как указать -8 в строке формата? Я пробовал Z и X после прочтения документов SDF, но безрезультатно. Что я должен использовать?

+0

Остерегайтесь: использование одной цифры для [offset-from-UTC] (https://en.wikipedia.org/wiki/UTC_offset) ** не является стандартным ** ([ISO 8601] (https: // en.wikipedia.org/wiki/ISO_8601)). Возникнут проблемы с различными библиотеками и протоколами, которые правильно ожидают двойные цифры с нулевым нулевым значением для одноразрядных значений. –

ответ

3

Использование -8 в стандартном формате, отличном от ISO.

Ожидается что-то вроде -0800 или -08:00. Это связано с тем, что смещение по времени может включать полтора часа.

Вы должны запустить преобразование предварительной обработки на строку перед передачей его в SimpleDateFormat и изменить его на "Wed Dec 31 00:00:00 GMT-0800 1969" и использования:

new SimpleDateFormat("EEE MMM dd hh:mm:ss Z yyyy");

Если вы хотите, чтобы сделать его проще просто создать метод, чтобы заменить -8 с America/Los_Angeles и использовать ZZZ.

+0

Это работает как препроцессорное преобразование: 's = s.replaceFirst (" ([\\ - \\ +]) (\\ d) \\ b (?! :) "," $ 10 $ 200 "). ReplaceFirst (" ([\\ - \\ +]) (\\ d \\ d) \\ b (?! :) "," $ 1 $ 200 ");'. Он обрабатывает - или +, за которым следуют 1 или 2 цифры, но оставляет последовательности из трех или более цифр отдельно, а также последовательности, за которыми следует ':'. – ajb

1

Если вы используете Java 8, вы можете попробовать DateTimeFormatter с рисунком "EEE MMM d HH:mm:ss O yyyy" любит:

String date = "Wed Dec 31 00:00:00 GMT-8 1969"; 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss O yyyy"); 
    LocalDateTime dateTime = LocalDateTime.parse(date, formatter); 

O представляют локализованные зоны смещения и может форматировать зону смещения, как GMT + 8, GMT + 08: 00 , UTC-08: 00. Вы можете увидеть Offset O в DateTimeFormatter для более подробной информации.

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

  • Нет связанных вопросов^_^