Может ли кто-нибудь объяснить разницу между System.DateTime и System.DateTimeOffset в С#.NET? Что лучше всего подходит для создания веб-приложений с пользователями из разных часовых поясов?
Разница между System.DateTime и System.DateTimeOffset
Ответ 1
Значение DateTime определяет конкретную дату и время, оно включает свойство Kind, которое предоставляет ограниченную информацию о часовом поясе, к которому относится эта дата и время.
Структура DateTimeOffset представляет значение даты и времени вместе со смещением, которое указывает, насколько это значение отличается от UTC. Таким образом, значение всегда однозначно идентифицирует одну точку во времени.
DateTimeOffset следует рассматривать как тип даты и времени по умолчанию для разработки приложений, поскольку значения для значений DateTimeOffset гораздо чаще, чем значения для значений DateTime.
См. дополнительную информацию, примеры кода на: http://msdn.microsoft.com/en-us/library/bb384267.aspx
Ответ 2
DateTimeOffset представляет дату и время как дата и время UTC.
So
DateTimeOffset dtoNow = DateTimeOffset.Now;
совпадает с
DateTimeOffset dtoUTCNow = DateTimeOffset.UTCNow;
Здесь dtoNow будет равно dtoUTCNow, даже если один был инициализирован DateTimeOffset.Now, а другой был инициализирован DateTimeOffset.UTCNow;
Итак, DatetimeOffset хорош для хранения разницы или смещения w.r.t UTC.
Подробнее см. MSDN.
Ответ 3
Здесь есть пара пунктов:
Данные DateTime должны храниться в формате UTC в вашей базе данных:
http://www.4guysfromrolla.com/articles/081507-1.aspx
Когда вы используете информацию DateTime в своем веб-приложении, вам необходимо преобразовать ее в LocalTime:
DateTime.UtcNow.ToLocalTime();
преобразует его в локальное время с точки зрения веб-сервера.
Если у вас есть WebServer в одном месте, обслуживая клиентов в разных странах, вам необходимо выполнить эту операцию в javascript на самом Клиенте:
myUTCDate.toLocaleTimeString();
http://www.java2s.com/Code/JavaScript/Date-Time/ConvertDatetoLocaleString.htm