2013-03-28 3 views
6

У меня есть процесс, который принимает значение datetime с часовым поясом в виде строки (данные поступают из внешней системы). Мне нужно перевести это datetime на то, какое время было бы в часовом поясе локальных компьютеров.Преобразование времени из разных часовых поясов с учетом летнего времени

Пример кода:

string cetId = "Central European Standard Time"; 
if (timeZone == "CET") 
{ 
    TimeZoneInfo cetZone = TimeZoneInfo.FindSystemTimeZoneById(cetId); 
    returnDateTime = TimeZoneInfo.ConvertTime(statusDateTime, cetZone, TimeZoneInfo.Local); 
} 
else if (timeZone == "CEST") 
{ 
    TimeZoneInfo cestZone = TimeZoneInfo.FindSystemTimeZoneById(cetId); 
    returnDateTime = TimeZoneInfo.ConvertTime(statusDateTime, cestZone, TimeZoneInfo.Local); 
} 

мне нужно сделать что-то конкретное, если время CEST (среднеевропейское летнее время) Есть ли вместо СЕТ (центрально-европейское время), или же обрабатывать .net объекта TimeZoneInfo этот сценарий?

ответ

1

Все должно быть в порядке.

Вы сообщаете ConvertTime, какие оба часовых пояса (источник и цель) есть.

У вас есть особые проблемы с этим или вы просто просите подтверждения?

+0

Я был просто обеспокоен тем, что время перехода на летнее ногами в разные даты, в зависимости от часового пояса и Я был обеспокоен тем, что времена не будут правильно переведены – Tadhg

0

От TimeZoneInfo.ConvertTime()

The value of the Kind property of the dateTime parameter must correspond to the sourceTimeZone parameter, as the following table shows. 

Просто хочу добавить, что вы должны следить за собственность «Вид» вашего StatusDateTime. В вашем случае оно должно быть «Unspecified». Проверьте раздел «Замечания»

0

Я создал библиотеку некоторое время назад, чтобы инкапсулировать эти виды преобразований:

https://github.com/b9chris/TimeZoneInfoLib.Net/blob/master/TimeZoneInfoLib/TimeZone/UtcTimeZone.cs

Может быть полезно для вас, или вы просто хотите, чтобы забрать его на дважды проверьте свой код. Одна из вещей, которые он инкапсулирует, - это предостережение @ Брайана - поэтому у него есть явные имена методов, относящиеся к свойству .Kind, которые бросают полезные исключения, если .Kind ошибочен. Он также занимает немного черновой работы из получения полезных/общие/имена летнему времени и сокращения:

https://github.com/b9chris/TimeZoneInfoLib.Net/blob/master/TimeZoneInfoLib/TimeZone/TimeZoneShortNameMap.cs

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