#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 это будет, потому что правила местного времени могут вызвать сдвиг. Правила часовых поясов большинства стран довольно стабильны, но, конечно, не все из них.