2013-03-28 57 views
6

我有接受日期时间值与时区作为字符串(数据来自外部系统)的过程。我需要将这个日期时间翻译成本地机器时区的时间。转换时间从不同的时区,包括夏时制

示例代码:

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(欧洲中部夏令时间),而不是CET(欧洲中部时间)或不.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的“之类的”属性。在你的情况下,它必须是'未指定'。退房的“备注”部分

0

我创建了一个库,而回封装这些类型的变换:

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

可能对你有用,或者你可能只是想捡起来交给仔细检查你的代码。它封装的一件事是@ Brian的告诫 - 因此它具有与.Kind属性相关的明确方法名称,如果.Kind错误则抛出有用的异常。它也需要繁重的工作一点点出越来越有用/普通/夏令时的名称和缩写:

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

相关问题