2010-09-17 4 views
1

я следующий сценарий:Почитаю объект DateTime в другом часовом поясе

США: базы данных сервера приложений &

Европы: клиент

Сервер считывает время даты (например, 12:00) объект из базы данных и отправить его клиенту в Европе. Проблема заключается в том, что клиент отображает это время в часовом поясе клиента (например, 18:00), но нам нужно время в базе данных, независимо от часового пояса сервера. На клиенте мы не знаем, из какого временного пояса это значение.

Итак, как мы можем достичь этого?

+1

Связанный вопрос: http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone- лучшие практики – Oded

ответ

1

ваши теги сообщают ответ.

использовать класс TimeZone.

http://msdn.microsoft.com/en-us/library/system.timezone.touniversaltime.aspx

также: Creating a DateTime in a specific Time Zone in c# fx 3.5

Таким образом, в вашей БД, время должно быть UTC. оттуда вы можете делать все, что хотите.

+1

TimeZone устарел - TimeZoneInfo - ваш друг. –

+0

хорошо, что я связан со своим сообщением :) – Stefanvds

1

Не можете ли вы просто использовать DateTime.ToUniversalTime()?

http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx

В качестве альтернативы, если вы не хотите, UTC, вы можете узнать часовой пояс вашего сервера и сделать что-то вроде:

DateTime dt; 
TimeZoneInfo timezone_EST = 
    TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");  
DateTime dt_EST = TimeZoneInfo.ConvertTime(dt, timezone_EST); 
+0

Проблема этого подхода заключается в том, что мне пришлось бы перебирать таблицу данных с 10k строк для этого. – Enyra

0

Если вы храните данные DateTime в SQL 2008, взгляните на новый тип datetimeoffset, который будет хранить информацию о часовом поясе, а также дату и время сами

+0

Информация о часовом поясе не хранится. Он сохраняет смещение от UTC в тот момент времени. Это очень разные вещи. Учитывая мгновенный часовой пояс UTC и часовой пояс, я бы знал, какое местное время будет через пять минут. Учитывая момент UTC и смещение, я бы не стал. –

+0

К сожалению, это SQL 2005, который пока не поддерживает это. – Enyra

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