Официально спецификация ISO 8601 не допускает дату с часовым поясом, если не указано время. Таким образом, если вы хотите оставаться совместимым с ISO 8601, вы не можете предоставить дополнительную информацию для значений только для даты, чем год, месяц и день (без обращения к временным интервалам, о которых речь пойдет ниже).
Один формат, который допускает , позволяет использовать это XML-схема (также известная как "XSD") в типе xs:date
. Там это не обязательно, и сразу же следует за днем, например, 2018-09-07Z
. Спецификация XSD вызывается в Разделе D.3 Отклонения от форматов ISO 8601 :
D.3.4 Разрешенный часовой пояс
Лексические представления для
дата типов данных, разрешение gYearMonth, gMonthDay, gDay, gMonth и gYear
необязательный указатель часового пояса.
Я понимаю, что вы не спрашивали о XSD, но это единственное известное мне нормативное указание, которое свободно доступно в Интернете, где указывается часовой пояс на дату, это отклонение от ISO 8601.
Как уже отмечали другие - думать о дате с часовым поясом довольно сложно. Во многих отношениях значение только для даты является неоднозначным. Подумайте, представил ли я вам такой календарь:
Указание на любую дату в этом календаре ничего не говорит мне о часовых поясах. Я могу дать календарь кому-то в другом часовом поясе, и он все еще сможет говорить о датах. Просто если мы оба указываем на «сегодня» одновременно, мы могли бы не указывать на одну и ту же дату. Таким образом, часовые пояса применяются только тогда, когда мы применяем временной контекст, будь то «сейчас» или определенный.
Однако мы склонны рационализировать все моменты времени в данный день с точки зрения часового пояса. В вашем примере «День UTC». Мы имеем в виду, что он работает с T00:00Z
одного дня до T00:00Z
следующего. Это обычно объясняется такими вещами, как xs:date
, допускающим смещение часового пояса.
Если бы мы хотели быть строго совместимыми с ISO 8601 и представлять то же самое значение, мы должны были бы предоставить диапазон значений даты + времени, которые называются «временными интервалами» в разделе 4.4 спецификации ISO 8601, и являются разделены символом косой черты (/
). Примером такого значения будет 2018-09-07T00:00Z/2018-09-08T00:00Z
. Однако, будьте осторожны, потому что ISO 8601 говорит ничего о том, должна ли дата окончания интерпретироваться включительно или исключительно. Подробнее об этом здесь .
Другое представление интервала ISO 8601 допускает время начала и компонент duration , такой как 2018-09-07T00:00Z/P1D
. Мне кажется, что это самый близкий полностью совместимый с ISO 8601 способ представления целой даты, интерпретируемой в UTC.
Тем не менее, лично мне, если бы мне нужно было передать часовой пояс с датой, я бы использовал 2018-09-07Z
, даже если он не был строго совместим. Просто убедитесь, что все потребители ваших данных согласны с этим форматом. Если вы не можете этого сделать, просто наберите 2018-09-07
и назовите свое поле примерно как utcDate
.