Стандарт REST API / лучшая практика для указания летнего времени

#rest

#rest

Вопрос:

У меня есть набор REST API. Есть случай, когда я хотел бы получить данные на основе заданного времени, как показано ниже :

2020-02-06T00:00 09:30

Если я нахожусь во времени Австралии (Австралия / Аделаида), я бы отправил указанную выше дату в API, чтобы получить соответствующие данные 6 февраля. 9.30 — это смещение центрального стандартного времени Австралии.

Но есть случай, когда указанное время приходится на летнее время в этом часовом поясе. В вышеупомянутом часовом поясе переход на летнее время осуществляется с апреля по октябрь со смещением ( 10.30). Итак, если бы мне нужно было получить данные за сентябрь, должен ли клиент предоставить необходимое смещение на основе даты (с 9.30 для даты февраля и 10.30 для даты сентября)?

или клиент должен отправлять даты со смещением текущего часового пояса (без учета дневного света), и должен ли сервер нести ответственность за определение дат, которые переходят на летнее время, и нормализовать эту дату на один час перед обработкой? Каков был бы правильный способ справиться с таким случаем в REST? пожалуйста, помогите.

Ответ №1:

В целом, я бы сказал, что это хорошие рекомендации:

  • Не используйте смещения, используйте идентификаторы Olson. Таким образом , время , когда вы возвращаетесь , должно включать Australia/Adelaide , а не 9.30 . Любая библиотека дат, заслуживающая внимания, может понять Australia/Adelaide .
  • Если вы работаете с тем, что происходило в прошлом, обычно проще просто использовать UTC. Ваш сервер может использовать UTC для всего этого и просто позволить клиенту обрабатывать перевод в местный часовой пояс перед просмотром. Но это, как правило, лучше всего обрабатывать на уровне представления / представления вашего приложения, а не в модели данных. Один из примеров, почему это полезно, заключается в том, что «1:30 утра» происходит дважды за ночь, когда мы переходим на зимнее время.
  • Для всего, что «запланировано» в будущем, обычно лучше всего использовать «местное время» идентификатор часового пояса. Например, если вы хотите что-то делать в 2 часа дня каждый день в году, вам нужно будет знать, в каком часовом поясе оно находится, чтобы приспособиться к изменениям летнего времени. Правила перехода на летнее время меняются каждый год для некоторых стран мира, так что это делает вашу систему надежной на будущее.

Поэтому, если вы бронируете встречу с кем-то в следующем году, в определенное (местное) время. Пока нет 100% гарантии, какое время UTC это будет, потому что правила местного времени могут вызвать сдвиг. Правила часовых поясов большинства стран довольно стабильны, но, конечно, не все из них.