Разница между системой.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.