扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年9月30日
关键字: 编程
现在IT业界讨论的话题集中在美国政府对夏令时的改变以及这一改变对计算机资源的影响,关注的焦点集中在操作系统上,不过这对应用软件程序员也造成了不少的问题。
这篇文章对夏令时进行了详细的介绍,阐述了夏令时的改变对您的软件可能会造成的影响,并为程序员提供了相关的帮助。
更多的日光
在2005年8月,乔治布什总统签署了能源策略法案(Energy Policy Act of 2005),根据此项法案的规定,美国的夏令时时间会有所延长,夏令时会提前三周开始(从
如果您的时区设置错误,您的系统时钟会延误一个小时,在您的计算机上运行的软件可能无法正确显示时间。微软公司为操作系统和相关的产品都提供了补丁,但是对于基于.NET的软件产品,微软并没有提供更多的信息来解决夏令时变更所造成的问题。
处理夏令时
对于.NET开发者而言,在实施夏令时的地区要处理夏令时所造成的时间问题(在夏威夷、萨摩亚群岛、波多黎各、关岛、维尔京群岛和亚利桑那州的大部分地区并不实行夏令时)。在实施夏令时的时区,春季时时钟从标准时间调整为夏令时,时间会提前一个小时,而到秋季的时候时间会向后调一个小时。
您可能会注意到时间的变化,尤其是,您会遇到一天出现23个小时和25个小时的情况,在这些情况下,如果您的软件需要使用系统时间并跨越夏令时,您的代码需要针对时间的变化调整这些时间值。
如果时间-日期值是通过用户输入获取的,那么微软建议开发者对基于用户输入的数据使用DateTime.Parse方法对特定值进行确认。在时间向后调整一个小时的日子(23个小时)以及调整为25个小时的日子,时间值包含了这两重含义。为了实现这些时间的调整,您需要确认夏令时变化的日期和时间。
这对解析和重新显示日期信息非常有帮助,同时您可以指定一条规则,让您的用户不要在他们的输入中指定夏令时设置。
为了避免这些问题,您可以将用户输入的时间值转换为格林尼治时间,目前,在.NET中并没有提供方法通过解析用户输入的字符串来展示用户的时间视角,并正确分配正确的格林尼治时间。这是因为使用夏令时的人居住地所处的时区并不是格林尼治标准时间。
在时间不明确的情况下,您可以使用TimeZone对象来确定时间是否处于夏令时状态,以下方法提供了这一功能:
Timezone.CurrentTimeZone.IsDaylightSavingTime(DateTimeObject)
或者您可以使用DateTime 对象的IsDaylightSavingTime属性,如下所示:
DateTimeInstance.IsDaylightSavingTime
夏令时改变对应用软件的影响
.NET应用软件使用操作系统提供的日期-时间值,操作系统的补丁意味着代码可以拥有正确的值。但是,正如以上的部分所示,依然会出现问题。微软表示,.NET开发者会发现他们的应用软件如果需要使用与时间相关的历史数据由于夏令时的改变而受到影响,或者他们使用了基于System.TimeZone类的自定义类来提供自定义的时区信息。
微软表示,开发者并不需要对应用软件进行修改,因为.NET架构的时区支持是依赖操作系统提供的时区信息。.NET架构提供了时间和时区感知功能,比如System.TimeZone类,在操作系统升级的时候会自动反映出时区规则的改变。
为了获取正确的夏令时历史数值,您必须创建自己的实现方法来处理所需要的夏令时改变、Windows操作系统的日期和时间信息。您需要编写新的代码来检查所需的时间值,并对
以下提供了一些与夏令时改变相关的信息资源:
l 试用Visual SourceSafe 2005版可能会出现问题,但是Visual SourceSafe 6.0b版则运行正常,这篇文档提供了相关的信息。
l 目前版本的Visual Studio运行正常,未来的Visual Studio将要提供新的类来支持时区的多重规则和自定义时区。
l 关于SQL Server通知服务的更多信息可以参见此处。
做好准备
千年虫问题曾经造成了非常大的恐慌,甚至宣判了世界上众多计算机系统的“死刑”。因此,相对而言,夏令时改变并不是非常大的问题,但是依然要慎重对待,所有的补丁和升级程序应当经过严格测试,而且您应当对存储和应用软件中使用日期-时间的历史数值进行评估和测试。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者