2012-05-19 45 views
19

如何检查丹麦白天时间储蓄是否已经生效,如果是的话,那么在我的数据中加1小时,否则不是? 我有一个XML文件:检查夏时制是否生效?

<day = "1" 
month = "5" 
sunrise ="06:30" 
sunset ="21:30" 
/> 

回答

44

认为你需要转换这个XML为DateTime,然后使用的TimeZoneInfo类。

如果丹麦本地时间:

DateTime thisTime = DateTime.Now; 
bool isDaylight = TimeZoneInfo.Local.IsDaylightSavingTime(thisTime); 

否则,你需要得到丹麦时区:

DateTime thisTime = DateTime.Now; 
// get Denmark Standard Time zone - not sure about that 
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Denmark Standard Time"); 
bool isDaylight = tst.IsDaylightSavingTime(thisTime); 
+0

为什么这个简化版,与 “E.南美洲标准时间” 为特定'新的DateTime(1995,10,15)'日期会奏效吗? 你不能在这里测试它https://dotnetfiddle.net/ilwIZu和文档历史记录在https://pt.m.wikipedia.org/wiki/Lista_de_períodos_em_que_vigorou_o_horário_de_verão_no_Brasil1995-10-15真的是天灯 –

4

您可以使用TimeZoneInfo.IsDaylightSavingTime

DateTime theDate = new DateTime(2012, 5, 1); // may 1st 
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); 
bool isCurrentlyDaylightSavings = tzi.IsDaylightSavingTime(theDate); 
6

当我编码为上述项目 - 新 - 纽约,我在调试器中发现,时间设置正确(包括DST)

TimeZoneInfo nyTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 

DateTime nyTime = GetLocalDateTime(DateTime.UtcNow, nyTimeZone); 

if (nyTimeZone.IsDaylightSavingTime(nyTime)) 
    nyTime = nyTime.AddHours(1); 

public static DateTime GetLocalDateTime(DateTime utcDateTime, TimeZoneInfo timeZone) 
    { 

     utcDateTime = DateTime.SpecifyKind(utcDateTime, DateTimeKind.Utc); 

     DateTime time = TimeZoneInfo.ConvertTime(utcDateTime, timeZone); 

     return time; 

    } 
+0

什么是' GetLocalDateTime'? – Kiquenet

+0

对不起,我忘了复制该方法。以上编辑 –

0

这是一个通用测试,并乐意更正,如果我的数学是不正确。就我而言,我只需要获得时区的GMT偏移量,而不管它在世界的哪个位置。

int timezone; 

    TimeZoneInfo localZone = TimeZoneInfo.Local; 

    DateTime myTime = DateTime.Now; 

    bool isDayLight = TimeZoneInfo.Local.IsDaylightSavingTime(myTime); 

    if (isDayLight) 
      timezone = Math.Abs(localZone.BaseUtcOffset.Hours) + 1; 
    else 
      timezone = Math.Abs(localZone.BaseUtcOffset.Hours); 

    Debug.WriteLine("timezone is " + timezone); 

我只是发现当前时间,如果是在Day Light Savings期间为GMT偏移量加1。

这工作与Visual Studio Express的2013年

0

你需要做两件事情:

  1. 呼叫IsAmbiguous
  2. 列表项IsDaylightSavingTime

if (TimeZoneInfo.Local.IsAmbiguousTime(unclearDate) || TimeZoneInfo.Local.IsDaylightSavingTime(unclearDate)) Console.WriteLine("{0} may be daylight saving time in {1}.", unclearDate, TimeZoneInfo.Local.DisplayName);

https://msdn.microsoft.com/en-us/library/bb460642(v=vs.110).aspx

+0

什么是“不明确”? – Kiquenet