有没有办法让DateTime.IsDaylightSavingTime在GMT/UTC时间的机器上工作

本文关键字:时间 UTC 机器 工作 GMT DateTime IsDaylightSavingTime 有没有 | 更新日期: 2023-09-27 18:19:51

我想知道是否有办法让DateTime对象在设置为GMT时间的操作系统上获得所有正确的属性。不仅仅是改变时间。

现在我做的是:

DateTime f = new DateTime(2012, 8, 1); //A date on summer
DateTime f2 = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(f, TimeZoneInfo.Local.Id, "Central Europe Standard Time");
var isSummer = f2.IsDaylightSavingTime(); //It always returns false if the OS is on GMT

它改变了小时&使格林尼治标准时间成为中欧标准时间的日期很好,但IsDaylightSavingTime功能不起作用。它总是返回false,因为我在系统中使用GMT,但我认为不应该返回,因为我为中欧创建了DateTime

有没有一种方法可以使DateTime对象f2真正成为本地对象,并使其理解如果它是August并且是European Central,则它应该返回true而不是false?

我知道如果我在机器上使用本地时间,它会正常工作,但我不能在服务器上更改GMT时间。我很想,但我做不到

有没有办法让DateTime.IsDaylightSavingTime在GMT/UTC时间的机器上工作

DateTime.IsDayLightSavingTime如果Kind为Local或Unspecified,并且此DateTime实例的值在当前时区的夏令时范围内,则返回true

即DateTime对象检查系统时区,因为UTC不支持夏令时,所以它返回true。

如果要验证,如果指定的时间属于某个时区的夏令时,请在TimeZoneInfo 中使用IsDayLightSavingTime方法

DateTime f = new DateTime(2012, 8, 1); //A date on summer 
TimeZoneInfo tzf2=TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time");
DateTime f2 = TimeZoneInfo.ConvertTime(f, tzf2);
var isSummer = tzf2.IsDaylightSavingTime(f2);