Момент
Рабочий вход: «2020-01-12T10: 30-06: 00»
Не рабочий вход: «2020-01-12T10: 30»
Эти входы - два очень разных животных. Первый представляет момент, второй нет. Первый определяет конкретную c точку на временной шкале, второй - нет.
Второму не хватает критического контекста часового пояса или смещения от UT C. Таким образом, мы не знаем, представляет ли второй вход 10:30 в 12-м в Токио, Япония, или 10:30 в Тунисе, Тунис, или 10:30 в Толедо, штат Огайо, США - все это очень разные моменты, с интервалом в несколько часов.
Неисправный источник данных
Если у вас есть источник входных данных, который произвольно пропускает информацию о смещении / зоне, то у вас нет проблем с вашим собственным Java программированием, вашим источником данных есть проблема.
Представьте себе источник данных, который предоставил ряд денежных сумм, некоторые суммы указывали валюту канадских долларов, евро или японских иен, в то время как некоторые суммы произвольно не указывали валюту. Очевидно, что это будет считаться ошибочными данными, которые должны быть исправлены в источнике.
Если вы действительно хотите работать с этими ошибочными данными, просто посмотрите на наличие знака плюс или минус. Если найдено, проанализируйте как OffsetDateTime
. Если опущен, анализировать как LocalDateTime
.
if( input.contains( "+" ) || input.contains( "-" ) ) {
OffsetDateTime odt = OffsetDateTime.parse( input ) ;
} else {
LocalDateTime ldt = LocalDateTime.parse( input ) ;
}
В качестве альтернативы, попытаться выполнить синтаксический анализ как один тип. Если выброшено DateTimeParseException
, попробуйте другой тип.
Если вы уверены , вход без пропуска был предназначен для определенной зоны или смещения, примените это смещение или зона.
ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;
Если вы хотите потерять часовой пояс, сохраняя смещение от UT C, чтобы сопоставить его с другими OffsetDateTime
объектами, позвоните toOffsetDateTime
.
OffsetDateTime odt = zdt.toOffsetDateTime() ;
К вашему сведению, разница между часовым поясом и простым смещением … Смещение всего на несколько часов-минут-секунд впереди (положительного) или позади (отрицательного) UT C, главный меридиан . Часовой пояс гораздо больше. Часовой пояс - это история прошлых, настоящих и будущих изменений смещения, используемого людьми определенного региона, как установлено (и часто изменено!) Их политиками.