Разница между системой.DateTime и системы.тип datetimeoffset

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

3 ответов


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

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

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

см. больше информации, примеры кода на: http://msdn.microsoft.com/en-us/library/bb384267.aspx


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

информация DateTime должна храниться в формате UTC в вашей базе данных:

http://www.4guysfromrolla.com/articles/081507-1.aspx

когда вы используете информацию DateTime в своем веб-приложении, вам нужно будет преобразовать ее в LocalTime:

 DateTime.UtcNow.ToLocalTime();

преобразует его в локальное время с точки зрения веб-сервера.

Если у вас есть сервер в одном месте, где клиенты в нескольких странах, то вам нужно будет выполнить эту операцию в javascript на самом клиенте:

 myUTCDate.toLocaleTimeString();

http://www.java2s.com/Code/JavaScript/Date-Time/ConvertDatetoLocaleString.htm


DateTimeOffset представляет datetime как UTC datetime.

Так

DateTimeOffset dtoNow = DateTimeOffset.Now;

это то же самое, что

DateTimeOffset dtoUTCNow = DateTimeOffset.UTCNow;

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

таким образом, DatetimeOffset хорош для хранения разницы или смещения w.r.t UTC.

для получения более подробной информации см. MSDN.