При отправке DateTime
экземпляров на сервер конвертация конвертация в UTC должна происходить как можно раньше. В этом случае клиентом и вашим клиентом является javascript, вы можете использовать метод toUTCString. Если вы используете momentjs, вы можете использовать utc.
При получении DateTime
экземпляров с сервера конвертация переход на местное время должен происходить как можно позже. Убедитесь, что сохраненные даты/даты получены в формате UTC при их создании. Опять же, именно клиент должен преобразовывать их в локальный экземпляр даты.
Наконец, отправьте все экземпляры datetime между клиентом и сервером, используя формат ISO8601. Momentjs, объект даты javascript, json.net все это могут сделать. Это гарантирует, что ничего не потеряно и не будут введены какие-либо культурные специфические ошибки.
Относительно того, почему его нужно обрабатывать у клиента, очень просто, его проще всего сделать там. Только клиент действительно знает свой часовой пояс, обычно это очень сложно «точно угадать» на стороне сервера. Единственная причина не в том, чтобы сделать это, если вы хотите сохранить информацию о часовом поясе пользователей с их профилем, но даже это может стать очень сложным (что происходит, если пользователь путешествует или перемещает местоположение и т. Д.).
Что касается сохранения, вы можете использовать либо тип DateTime, либо DateTime со смещением (имена истинных типов зависят от используемых вами RDBM). Какой из них выбрать, зависит от того, важно ли знать смещение от utc в момент его сохранения. До сих пор мне не приходилось это делать, но, возможно, это важно для вас. Он не влияет на фактический момент времени, так как DateTime должен представлять точку UTC во времени, а смещение должно представлять локальное время со смещением, чтобы вернуться к точке UTC во времени.
. Итак, вы в основном говорите, что все преобразования с локального на UTC или UTC на локальный должны выполняться только на стороне клиента –
@vikas - да, клиент/браузер должен всегда знать свой часовой пояс, поэтому имеет смысл переложить эту ответственность на него. Например: просто вызов toLocal в экземпляре momentjs преобразует время utc utc в правильное datetime в этом языке (который зарегистрирован на машине браузеров). Когда клиент отправляет даты и время, как UTC также имеет смысл по той же причине. – Igor