2012-10-04 5 views
0

В настоящее время я работаю над веб-приложением C# с базой данных сервера sql-сервера. У меня есть некоторые проблемы, связанные с датами, которые мне нужны для разработки.как обрабатывать часовые пояса и даты в многостраничном/лингвальном приложении

Приложение размещено на сервере и сервере баз данных в GMT. Пользователи распространяются по трем различным часовым поясам CEST, MSK, ALMT с возможностью вывести сайт в другие страны с течением времени.

В коде в настоящее время я использую DateTime.Now и GETDATE() в SQL, а с расположением серверов это GMT.

Вопрос заключается в том, какую форму должны хранить данные базы данных в базе данных, принимая во внимание разные культуры и т. Д. Должны ли они быть датами utc? Как следует обрабатывать следующее? Существует ли стандартная практика?

ответ

3

Все должно быть в UTC (не Часовой пояс сервера, UTC) при создании и смещении в часовой пояс пользователя непосредственно перед отображением.

Чтобы получить UTC, используйте DateTime.UtcNow на веб-сервере и GETUTCDATE() в базе данных.

Для преобразования DateTime значения, которые определяют UTC раз в любой другой часовой пояс:

var dt = DateTime.UtcNow; 
var tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
var localTimeInNewYork = TimeZoneInfo.ConvertTimeFromUtc(dt, tz); 

См.также Converting Times Between Time Zones на MSDN.

+0

Благодарим за эту информацию. Если я буду считать, что я использую utc datetime во всем мире, как я могу преобразовать его в текущий часовой пояс, основанный на культуре приложений? – amateur

+0

@amateur: вам нужно получить локальный часовой пояс пользователя (который действительно не зависит от культуры, я могу быть китайцем, но живу в Париже) в качестве строки и использовать код, который я даю. См. Также ['TimeZoneInfo.GetSystemTimeZones'] (http://msdn.microsoft.com/en-us/library/system.timezoneinfo.getsystemtimezones.aspx). – Jon

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