Т.Л., д-р
OffsetDateTime.parse(
"20121116203036Z" ,
DateTimeFormatter.ofPattern("yyyyMMddHHmmssX")
).toLocalDateTime()
.toString()
.replace("T" , " ")
java.time
В java.time классы, встроенные в Java сделать это легко. Избегайте трудных старых классов времени, таких как Date
& DateFormat
, теперь наследие.
String input = "20121116203036Z";
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyyMMddHHmmssX");
OffsetDateTime odt = OffsetDateTime.parse(input , f);
odt.toString(): 2012-11-16T20: 30: 36Z
Чтобы получить вывод, который вы могли бы определить пользовательские DateTimeFormatter
. Ленецкий способ состоит в том, чтобы преобразовать в LocalDateTime
, просто чтобы потерять Z
на конце, что указывает на смещение-от-UTC (Z
сокращенно на Zulu
и означает UTC). Затем используйте toString
, чтобы сгенерировать строку в формате ISO 8601, за исключением замены T
посередине пробелом.
String output = odt.toLocalDateTime().toString().replace("T" , " ");
2012-11-16 20:30:36
См live code in IdeOne.com.
ISO 8601
Я предлагаю, а не использовать свой формат для таких значений даты и времени, вместо того, чтобы использовать ISO 8601 стандартные форматы. Обычный формат для такого значения - 2016-11-16T02:45:02Z
. Обратите внимание на T
в среднем отделянии год-месяц-день с часа-минуты-секунды. В качестве альтернативы стандарт позволяет свести к минимуму использование сепараторов, считающихся «базовой» версией: 20161116T024502Z
, но сохраняет T
посередине.
Классы java.time могут анализировать и генерировать расширенные версии, но не базовую версию.
О java.time
java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые классы времени, такие как java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
.
Проект Joda-Time, теперь в maintenance mode, советует перейти на java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений.
Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport и дополнительно выполнен с возможностью Android в ThreeTenABP (см How to use…).
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more.
Пожалуйста, избегайте ручного вычисления времени, особенно когда есть простое решение, которое не связано с этим. –