Стратегия часовых поясов

Я создаю приложение MVC 3, в котором пользователи могут находиться не в одном часовом поясе, поэтому я намеревался сохранить все в формате UTC и преобразовать из UTC в местное время в представлениях и местное время по всемирному координированному времени при отправке.

Посмотрел, хотя, похоже, здесь не так много хороших решений.Честно говоря, я как бы ожидал, что будет доступен атрибут для автоматического преобразования времени UTC в местное время, по крайней мере, но, похоже, его не существует.

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

Есть какие-нибудь предложения по поводу того, как справиться с этим в качестве общей стратегии?

РЕДАКТИРОВАТЬ Кажется, все очень застряли на части «как мне получить часовой пояс клиента», которая, как я упоминал в одном из комментариев, не мое дело. Меня устраивает пользовательский параметр, определяющий часовой пояс, поэтому предположим, что я уже знаю часовой пояс клиента ... это не решает мою проблему.

Прямо сейчас для каждого представления, когда я визуализирую дату, мне нужно было бы вызвать метод для визуализации даты в местном часовом поясе из utc. Каждый раз, когда я отправляю дату для отправки на сервер, мне нужно преобразовать ее из местного часового пояса в UTC. Если я забуду это сделать, возникнут проблемы ... либо дата отправки будет неправильной, либо отчеты и фильтры на стороне клиента будут неправильными.

Я надеялся, что существует более автоматизированный метод, тем более что модель представления строго типизирована в MVC 3, я надеялся, что sum magic сможет по крайней мере автоматически отображать в часовом поясе, если не обрабатывать отправку, точно так же, как форматом даты или диапазоном можно управлять с помощью атрибута.

Так что вроде

[DateRange]
Public DateTime MyDate

у меня может быть что-то вроде

[ConvertToUTC(offset)]
Public DateTime MyDate

В любом случае, похоже, мой единственный подход - написать специальную аннотацию данных, чтобы отображать ее в часовом поясе, и переопределить модель MVC 3 binder, поэтому входящие даты преобразуются, если я не хочу обернуть дату в вызове метода. Поэтому, если у кого-то нет дополнительных комментариев или предложений, это будет один из этих двух вариантов,Я просто удивлен, что для этого еще не существует чего-то.

Если я реализую решение, я обязательно его опубликую.

Edit 2 Что-то вроде этого http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx для представлений MVC 3 и моделей представлений то, что я ищу.

Final Edit Я отметил ответ epignosisx как правильный, но также хочу добавить несколько комментариев. Я нашел здесь нечто похожее: http://dalldorf.com/blog/2011/06/mvc3-timezones-1/ С реализацией получения часового пояса от клиента путем помещения его в файл cookie для людей, которые этого хотят в части 2 (ссылка ниже, поскольку ссылка в первой части статьи на часть 2 не работает) http://dalldorf.com/blog/2011/09/mvc3-timezones-2/

При использовании этих подходов важно отметить, что вы ДОЛЖНЫ использовать Editfor и Displayfor вместо таких вещей, как TextForFor, как только EditFor и DisplayFor. использовать поставщиков метаданных, используемых для указания MVC, как отображать свойство этого типа в модели. Если вы получаете доступ к значениям модели непосредственно в виде (скрытом), преобразование не произойдет.

22
задан Amasuriel 14 January 2012 в 18:05
поделиться