检查夏令时是否有效?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查夏令时是否有效?相关的知识,希望对你有一定的参考价值。
如何检查丹麦的白天时间节省是否已经生效,如果是,那么我的数据加1小时,否则不行?我有一个xml文件:
<day = "1"
month = "5"
sunrise ="06:30"
sunset ="21:30"
/>
认为您需要将此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。
你需要做两件事:
- 打电话给
IsAmbiguous
- 列出项目
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
这是我可以在所有时区使用的简短解决方案:
DateTime utcTime = DateTime.Parse("30.10.2018 18:21:34")
DateTime localtime = ConvertUTCToLocalTime(utcTime);
public static DateTime ConvertUTCToLocalTime(DateTime UTCTime)
{
var localZone = TimeZone.CurrentTimeZone;
var offset = localZone.GetUtcOffset(UTCTime);
var localTime = UTCTime.AddHours(offset.Hours);
return localTime;
}
重要
myDateTime.IsDaylightSavingTime会返回正确的值...但是...它至少在一天中的小时内是准确的,仅仅通过日期是不够的。
例如今年(2019)3/10/2019 02:00:00,因为myDateTime将返回false,但是3/10/2019 03:00:00将返回true。
以上是关于检查夏令时是否有效?的主要内容,如果未能解决你的问题,请参考以下文章