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

2007 年 6 月 22 日

包括各个.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

2007 年 6 月 22 日 08:59268
用户头像

发布了 37 篇内容, 共 64237 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

架构师训练营第 0 期第 9 周作业

无名氏

JVM 秒杀

JVM垃圾回收与秒杀系统设计

走过路过飞过

Android VectorDrawable系列文章Review

teoking

android SVG

【架构师训练营 - week9 -1】作业

早睡早起

第 09 周 JVM & 高性能 命题作业

Jaye

JVM垃圾回收及秒杀系统设计

stars

极客大学架构师训练营 0 期 week 08 学习笔记

chun1123

学习

架构师训练营 week9 - 学习总结

devfan

垃圾回收算法及收集器介绍

考尔菲德

第9周命题JVM回收&秒杀

慵秋

《架构师训练营》第9周 命题作业

极客大学架构师训练营 0 期 week 09 学习笔记

chun1123

学习 性能优化 秒杀系统

第9周作业

王鑫龙

Java ThreadLocal

陈皮

第9周-作业1

seng man

架构师课程第九周总结

dongge

第9周-课后练习

Dawn

架构师训练营第九周学习心得

子豪sirius

JVM 垃圾回收原理

Week 09 总结

鱼_XueTr

极客大学架构师训练营 0 期 week 09 作业

chun1123

JVM 秒杀系统

LeetCode题解:189. 旋转数组,环状替换,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

第九周学习总结

潜默闻雨

架构师训练营第九周作业

子豪sirius

架构师必备的那些分布式事务解决方案!!

架构师修行之路

分布式 分布式事务 架构师

JVM垃圾回收原理&秒杀系统设计见解

潜默闻雨

架构师训练营 week9

devfan

第9周 JVM 和秒杀场景

陆不得

第九周作业

刘卓

架构师训练营第9周总结

王鑫龙

极客大学架构师训练营

极客大学架构师训练营 0 期 week 08 作业

chun1123

hdfs 数据结构与算法

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