处理时间/日期值的新最佳实践

包括各个.NET语言在内的各种程序设计语言中的一个常见问题就是,它们都没有提供足够优雅的时区支持方法。为了能够正确处理时区信息,程序要么需要将时区信息单独保存起来,要么则要把时间转化成统一的标准形式保存。这样繁杂的工作让人厌倦,以至于很多开发者在开发时干脆将时区信息撇在一旁,不予理会。

不过微软公司则试图通过引入两个新的类型来改变这种状况。第一个类型是TimeZoneInfo。与其前辈TimeZone类型相比,TimeZoneInfo在时区方面提供了更好的支持,例如它能够枚举出储存于操作系统中的各个时区信息。

第二个叫做DateTimeOffset的类型则更为重要,在大多数情况下该类型将会作为传统DateTime类型的替代品使用。与DateTime只能保存本地和UTC时间不同的是,DateTimeOffset类型可以表示任何时区中的时间——只要指定该时区相对于UTC的偏移量即可。

按照Anthony Moore的说法,在大多数时间相关的场景中,DateTimeOffset都应该作为默认的表示方法。不过以下情况例外:

  • DateTime可以用于对时间的绝对值不敏感的场合。例如商店的营业时间。
  • DateTime可以用于无关时区的一些互操作场景中。例如OLE自动化、数据库、当前正使用DateTime的.NET API等。
  • DateTime可以用于表示一个不包含时间的“纯”日期。例如某人的生日。
  • TimeSpan可以用于表示时间的跨度——与日期无关。

据Justin Van Patten所说,Base Class Library(BCL)将在未来全面使用DateTimeOffset——虽然并不是所有人都完全赞同这个决定。例如有些人希望引入IDateTime 来代替原本的DateTime签名,而另一些人则希望让DateTime对象中只存储UTC时间。

至于这两个新的时间日期类将如何配合.NET框架(特别是ADO.NET和LINQ)的其它部分,还有待时间的验证。

查看英文原文:New Best Practices for Working with Date/Time Values

你可能感兴趣的:(处理时间/日期值的新最佳实践)