2019: 02: 28 11: 37: 47-06: 00
Это не ваш обычный стандартный формат ISO
По аналогии с ISO 8601:
- Замените символ ПРОБЕЛ в середине символом
T
. - Заменить первые два символа COLON дефисами.
Манипуляции со строками
Вы можете сделать это, разделив строку на пробел, заменив первые два двоеточия в первой части, а затем соединив их вместе.
String input = "2019:02:28 11:37:47-06:00";
String[] parts = input.split(" ");
String inputModified = parts[0].replace( ":" , "-" ) + "T" + parts[1] ;
Код форматирования: xxxxx
Или пользовательский шаблон форматирования можно определить с помощью объекта DateTimeFormatter
.Используйте пять x
кодовых символов для смещения часов-минут и необязательных секунд с разделителями символов COLON.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu:MM:dd HH:mm:ssxxxxx") ;
См. Этот форматер в коде, запущенном в режиме реального времени на IdeOne.com .
OffsetDateTime
LocalDate.parse
Нет, сначала проанализируйте все, а не только часть даты, на случай, если вы найдетеэто ценно в какой-то момент.Анализируйте как OffsetDateTime
, так как ваш ввод указывает смещение от UTC (часы-минуты-секунды), но не полный часовой пояс (Continent/Region
).
OffsetDateTime odt = OffsetDateTime.parse( input ) ;
Очевидно, вам нужна часть только с датой, без времени суток и без смещения от UTC.Предполагая, что вы хотите указать дату, указанную в этом смещении, просто позвоните toLocalDate
.
LocalDate ld = odt.toLocalDate() ;
ld.toString (): 2019-02-28
иливозможно, вы хотите дату, как видно в другом месте.Помните, что в любой данный момент дата и время суток меняются по всему земному шару в зависимости от часового пояса.Это может быть «завтра» в Asia/Japan
, в то время как одновременно «вчера» в America/Edmonton
.
UTC
Если вы хотите указать дату в UTC:
OffsetDateTime odtUtc = odt.withOffsetSameInstant( ZoneOffset.UTC ) ;
LocalDate ld = odtUTc.toLocalDate() ;
ZonedDateTime
Или, возможно, вы хотите, чтобы дата отображалась в определенном часовом поясе.
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;
LocalDate ld = zdt.toLocalDate() ;
Совет. Если вы можете определить источник двоеточий в части даты,ознакомить их со стандартом ISO 8601 .