Я создаю приложение MVC 3, в котором пользователи могут не находиться в одном и том же часовом поясе, поэтому я намеревался хранить все в UTC и конвертировать из UTC в местное время в представлениях и локальное время в UTC при отправке.
Пройдя по браузеру, хотя, кажется, не очень много хороших решений для этого.Честно говоря, я ожидал, что атрибут будет доступен для автоматического преобразования времени UTC в местное время, по крайней мере, но, похоже, его не существует.
Мне хочется просто усердно пытаться преобразовать каждый вход вручнуюв UTC и ручное преобразование каждого вида в местное время будет очень подвержено ошибкам и приведет к трудностям в обнаружении ошибок, когда время не преобразуется в или из.
Любые предложения о том, как справиться с этим в целомстратегия?
РЕДАКТИРОВАТЬ Кажется, что все очень застряли на части "Как я могу получить часовой пояс клиента", которая, как я упоминаю в одном из комментариев, не моябеспокойство.Я в порядке с настройками пользователя, которые определяют их часовой пояс, поэтому предположим, что я уже знаю, что такое часовой пояс клиента ... это не решает мою проблему.
Прямо сейчас, на каждом представлении, когда я отображаюНа сегодняшний день мне нужно вызвать метод для его рендеринга в местном часовом поясе из utc.Каждый раз, когда я отправляю дату для отправки на сервер, мне нужно преобразовать ее из местного часового пояса в UTC.Если я забуду это сделать, будут проблемы ... либо отправленная дата будет неправильной, либо отчеты и фильтры на стороне клиента будут неправильными.
Я надеялся, что существовал более автоматизированный метод, тем более чтомодель представления строго типизирована в MVC 3. Я надеялся, что сумма магии сможет хотя бы автоматически отображаться в часовом поясе, если не обрабатывать отправку, точно так же, как формат даты или диапазон могут контролироваться атрибутом.
Так, например,
[DateRange]
Public DateTime MyDate
У меня может быть что-то вроде
[ConvertToUTC(offset)]
Public DateTime MyDate
В любом случае, я думаю, что мой единственный подход - написать пользовательскую аннотацию данных для ее отображения вчасовой пояс и переопределение для подшивки модели MVC 3, поэтому входящие даты преобразуются, если только я не хочу переносить дату в вызове метода.Поэтому, если у кого-то нет дальнейших комментариев или предложений, это будет один из этих двух вариантов, я просто удивлен, что что-то еще не существует для этого.
Если я реализую решение, я обязательно опубликуюit.
Edit 2 Как-то так http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx для MVC 3 представления и модели просмотра - это то, что я ищу.
Окончательное редактирование Я пометил ответ эпигнозиса как правильный, но у меня также есть несколько комментариев для добавления.Я нашел нечто похожее здесь: http://dalldorf.com/blog/2011/06/mvc3-timezones-1/ С реализацией получения часового пояса от клиента, поместив его в cookie для людей, которые хотят этого во второй части (ссылка ниже, так как ссылка в первой части статьи начасть 2 не работает) http://dalldorf.com/blog/2011/09/mvc3-timezones-2/
При этих подходах важно отметить, что вы ДОЛЖНЫ использовать Editfor и Displayfor, а не такие вещи, как TextForFor, поскольку только EditFor и DisplayFor используют поставщиков метаданных, используемых для передачи MVCкак отобразить свойство этого типа на модели.Если вы обращаетесь к значениям модели непосредственно в представлении (@ Model.MyDate), преобразование не будет выполняться.