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

H27*_*dio 4 .net c# datetime

我试图知道是否有办法让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
Run Code Online (Sandbox Code Playgroud)

它改变了时间和日期,使GMT成为中欧标准时间就好了,但IsDaylightSavingTime功能不会起作用.它总是返回false,因为我在系统上使用GMT,但我认为不应该因为我DateTime为中欧创建了一个.

有没有办法让DateTime对象f2真正本地化并让它理解如果它的八月并且是欧洲中心它应该返回true而不是false?

我知道如果我在机器上使用本地时间它可以正常工作,但我无法改变服务器上的GMT时间.我很乐意,但我不能.:-)

Man*_*nas 11

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

即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);
Run Code Online (Sandbox Code Playgroud)

  • 对不起,我们需要使用tzf2.IsDaylightSavingTime(f2)来验证它是否是DLSTime. (4认同)