Разница между System.DateTime и System.DateTimeOffset - PullRequest
13 голосов
/ 01 июля 2011

Может кто-нибудь объяснить разницу между System.DateTime и System.DateTimeOffset в C # .NET?Что лучше всего подходит для создания веб-приложений с пользователями из разных часовых поясов?

Ответы [ 3 ]

9 голосов
/ 01 июля 2011

Значение DateTime определяет конкретную дату и время, оно включает свойство Kind, которое предоставляет ограниченную информацию о часовом поясе, к которому относится эта дата и время.

Структура DateTimeOffset представляет значение даты и времени,вместе со смещением, которое указывает, насколько это значение отличается от UTC.Таким образом, значение всегда однозначно идентифицирует один момент времени.

DateTimeOffset следует рассматривать как тип даты и времени по умолчанию для разработки приложений, поскольку использование значений DateTimeOffset гораздо более распространено, чем использование значений DateTime.*

См. Дополнительную информацию, примеры кодов по адресу: http://msdn.microsoft.com/en-us/library/bb384267.aspx

3 голосов
/ 01 июля 2011

DateTimeOffset представляет дату-время как дату-время UTC.

Итак

DateTimeOffset dtoNow = DateTimeOffset.Now;

совпадает с

DateTimeOffset dtoUTCNow = DateTimeOffset.UTCNow;

Здесь dtoNow будет равно dtoUTCNow, даже если один был инициализирован в DateTimeOffset.Now, а другой был инициализирован в DateTimeOffset.UTCNow;

Итак, DatetimeOffset подходит для хранения разницы или смещения в формате U.r.t UTC.

Подробнее см. MSDN .

3 голосов
/ 01 июля 2011

Здесь есть пара моментов:

Информация 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

...