检查夏令时是否有效?

如何检查丹麦白天节省的时间是否已经生效,如果是,那么我的数据加1小时,否则不行? 我有一个xml文件:

 

认为您需要将此xml转换为DateTime,然后使用TimeZoneInfo类。

如果丹麦当地时间:

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

否则你需要获得丹麦TimeZone:

 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); 

当我编码如上 – 对于New-York,我在调试器中发现时间设置正确(包括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; } 

您可以使用TimeZoneInfo.IsDaylightSavingTime

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

这是一个通用测试,如果我的数学不正确,我很乐意予以纠正。 在我的情况下,我只需要获得时区的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。

你需要做两件事:

  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