2014-01-25 2 views
0

Для веб-приложения Asp.Net, которое будет работать по всему миру, у меня есть тип данных DateTimeOffset для таблиц базы данных (SQL Server 2012) и свойств модели.Введите время времени в приложении asp.net mvc, выполняющемся в нескольких часовых поясах?

Код Asv.Net Mvc @Html.EditorFor(model => model.TicketLink) принять следующий формат.

1/1/0001 12:00:00 AM +00: 00

Это немного некрасиво для пользователя, чтобы ввести +00: 00 в качестве часового пояса. (Они могут даже знать, в какой временной зоне они находятся). Каков наилучший способ избежать ввода часового пояса и правильной обработки?

ответ

1

я могу предложить следующий подход:

  1. Маркета пользователя часовой пояс идентификатор в базе данных

  2. Храните все значения времени в местном формате (с типом DateTime)

  3. (необязательно) При необходимости создайте дополнительное поле (с типом DateTimeOffset). Но имейте в виду, что эти значения могут измениться после того, как пользователь решит изменить свой часовой пояс.

  4. Конвертировать из локального часового пояса во всемирное время, когда это необходимо.

Основные плюсы такого подхода является то, что ваш пользователь может изменить свой часовой пояс. Вы должны сохранить часовой пояс пользователя в базе данных. И кажется, что это правильный путь, потому что все программное обеспечение форума запрашивает часовой пояс, когда кто-то пытается зарегистрироваться.

Преобразовать DateTime в DateTimeOffset Utc:

 string timezoneId = "W. Europe Standard Time"; 
     TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(timezoneId); 
     var d = new DateTimeOffset(dateTime, tzi.GetUtcOffset(dateTime)).ToUniversalTime(); 

(вы можете опустить ToUniversalTime)

Смежные вопросы