Это важный и удивительно сложный вопрос. Истина заключается в том, что не существует полностью удовлетворительного стандарта для постоянного времени. Например, стандарт SQL и формат ISO (ISO 8601) явно недостаточны.
С концептуальной точки зрения обычно речь идет о двух типах данных о датах времени, и удобно различать они (не указанные выше стандарты): «физическое время» и «гражданское время».
«Физический» момент времени - это точка непрерывной универсальной шкалы времени, с которой связана физика (игнорируя, конечно, относительность). Эта концепция может быть достаточно закодирована - сохраняется в UTC, например (если вы можете игнорировать прыжки секунд).
«Гражданское» время является спецификацией даты и времени, которая следует за гражданскими нормами: точка времени здесь полностью определяется набором полей даты и времени (Y, M, D, H, MM, S, FS) плюс TZ (спецификация часового пояса) (также «календарь», фактически, но давайте предположим, что мы ограничиваем обсуждение григорианским календарем). Часовой пояс и календарь совместно позволяют (в принципе) отображать из одного представления в другое. Но моменты гражданского и физического времени представляют собой принципиально разные типы величин, и их следует держать концептуально разделенными и обрабатывать по-разному (аналогия: массивы байтов и символьных строк).
Проблема запутанна, потому что мы говорим о эти события являются взаимозаменяемыми, и потому, что гражданские времена подвержены политическим изменениям. Проблема (и необходимость различать эти понятия) становится более очевидной для событий в будущем. Пример (взято из моего обсуждения здесь .
Джон записывает в своем календаре напоминание о некотором событии в datetime 2019-Jul-27, 10:30:00
, TZ = Chile/Santiago
(которое имеет смещение GMT- 4, следовательно, это соответствует UTC 2019-Jul-27 14:30:00
). Но в какой-то день в будущем страна решит изменить смещение TZ на GMT-5.
Теперь, когда наступит день ...
A) 2019-Jul-27 10:30:00 Chile/Santiago
= UTC time 2019-Jul-27 15:30:00
?
или
B) 2019-Jul-27 9:30:00 Chile/Santiago
= UTC time 2019-Jul-27 14:30:00
?
Нет правильного ответа, если не знать, что Джон имел в виду, когда говорил в календаре «Пожалуйста, позвоните мне в 2019-Jul-27, 10:30:00
TZ=Chile/Santiago
».
Он имел в виду «гражданский день-время» («когда часы в моем городе говорят 10:30 ")? В этом случае A) является правильным ответом.
Или он имел в виду «физический момент времени», точку в континуальной линии времени нашей Вселенной, скажем, «когда следующее солнечное затмение происходит». В этом случае ответ B) является правильным.
Несколько API-интерфейсов Date / Time имеют это право на различие: среди них Jodatime , который является основой следующего ( третий!) Java DateTime API (JSR 310).
Как насчет его использования следующим образом:
[ngClass] = "x? 'Whell': 'classWithNoAnimation'"
если x истинно, то переключиться на ад, в противном случае переключиться на classWithNoAnimation [ 112]