DateTime和TimeZoneInfo类如何处理夏时制?

问题描述

我试图了解.net如何处理夏时制。当我调用#... nm = nmap.PortScanner() nm.scan(hosts='192.168.1.0/24',arguments='-sP') for ip in nm.all_hosts(): host = nm[ip] mac = "-" vendorName = "-" if 'mac' in host['addresses']: mac = host['addresses']['mac'] if mac in host['vendor']: vendorName = host['vendor'][mac] status = host['status']['state'] rHost = {'ip': ip,'mac': mac,'vendor': vendorName,'status': status} print(rHost) #... 方法并传递date实例时,它对于今天的日期返回true。如果我在同一日期实例上调用DateTime的IsDaylightSavingTime方法,它将返回false。

为什么同一日期实例得到的结果不同?

IsDaylightSavingTime

这是link的小提琴。

解决方法

第一行打印True,因为它正在打印太平洋时间是否处于夏令时。太平洋时间从2020年11月1日更改为标准时间,今天是9月21日,因此现在是夏令时。

第二行显示False,因为它在您计算机所在的时区中都不夏令时。这是因为DateTime的类型为Local或{{1 }},DateTime.IsDaylightSavingTime使用计算机的系统时区来确定其结果:

此方法确定当前的DateTime值是否在本地时区的夏令时范围内,该范围由TimeZoneInfo.Local属性返回。

TimeZoneInfo.Local

本地时区是执行代码的计算机上的时区。

时区实际上不是Unspecified的一部分,所以DateTime不知道您希望它使用太平洋时间。