本文共 1910 字,大约阅读时间需要 6 分钟。
使用日期和时间信息的 .NET Framework 应用程序千差万别,它们可以通过多种方式使用这些信息。 日期和时间信息较常见的用法包括以下一种或多种:仅反映日期,时间信息并不重要。
仅反映时间,日期信息并不重要。
反映不依赖于特定时间和地点的抽象日期和时间(例如,大部分国际连锁店都在每个工作日的上午 9:00 开始营业)。
从 .NET Framework 之外的源中检索日期和时间信息,这种源中的日期和时间信息通常以简单的数据类型进行存储。
唯一、明确地标识单个时间点。 有些应用程序只要求主机系统上的日期和时间明确,而其他一些应用程序则要求跨系统的日期和时间都必须明确(也就是说,在一个系统上序列化的日期可以进行有意义的反序列化,并用在世界上其他任何地方的系统上)。
保留多个相关时间(如请求者的本地时间和服务器接收 Web 请求的时间)。
执行日期和时间算法,可能产生能够唯一、明确标识单个时间点的结果。
DateTime 值用于定义特定的日期和时间。 从 .NET Framework 的 2.0 版本开始,就包括了一个 属性,该属性可提供有关日期和时间所属时区的有限信息。 属性返回的 值指示 值是表示本地时间 ( )、协调世界时 (UTC) ( ),还是表示未指定的时间 ( )。
结构适用于执行下列操作的应用程序:
只使用日期。
只使用时间。
使用抽象日期和时间。
从 .NET Framework 之外的源(如 SQL 数据库)中检索日期和时间信息。 这些源通常以与 结构兼容的简单格式存储日期和时间信息。
执行日期和时间算法,但不关心常规结果。 例如,在向特定日期和时间添加六个月的加法运算中,结果是否按夏时制进行调整通常并不重要。
除非是表示 UTC 的特定 值,否则,该日期和时间值在可迁移性方面通常是不明确或是有限的。 例如,如果 值表示本地时间,那么它在该本地时区内是可迁移的(也就是说,如果在同一时区中的不同系统上反序列化该值,该值仍可以明确标识单个时间点)。 在该本地时区之外,该 值可有多种解释。 如果该值的 属性为 ,那么其可迁移性会更低:现在它在同一时区内不明确,那么它在首次被序列化的同一系统上,可能更不明确。 只有表示 UTC 的 值才可以明确标识单个时间点,且与它在哪个系统或是哪个时区中使用无关。
重要事项 | ||
---|---|---|
在保存或共享 数据时,应使用 UTC,而且应将 值的 属性设置为 。
DateTimeOffset 结构表示日期和时间值以及指示该值与 UTC 之差的偏移量。 因此,该值始终可以明确标识单个时间点。 虽然 类型包括 类型的大部分功能,但其目的并不是为了在应用程序开发中替代 类型。 而是适用于执行下列操作的应用程序:
虽然 值不依赖于特定的时区,但它可以来自任何不同的时区。 为了说明这一点,下面的示例列出了许多 值(包括本地太平洋标准时间)所属的时区。
TimeZoneInfo 类表示世界上的任意时区,并能将一个时区中的任何日期和时间转换为另一个时区中的等效日期和时间。 通过 类,可以使用日期和时间,以便任何日期和时间值都可以明确标识单个时间点。 类还是可扩展的。 虽然它依赖于在注册表中定义的、为 Windows 系统提供的时区信息,但它支持创建自定义时区。 它还支持时区信息的序列化和反序列化。 在有些情况下,完全利用 类可能需要进一步的开发工作。 首先,日期和时间值与其所属的时区没有紧密关联。 因此,除非您的应用程序提供将日期和时间与其相关联的时区链接在一起的某种机制,否则特定的日期和时间值很容易解除与其时区的关联。 (链接此信息的一种方法是定义同时包含日期和时间值及其相关联的时区对象的类或结构。)其次,Windows XP 及 Windows 的早期版本没有提供对历史时区信息的实时支持,而 Windows Vista 只能提供有限的支持。 对于设计用于处理历史日期和时间的应用程序,必须广泛使用自定义时区。 只有在实例化日期和时间对象时已知该日期和时间值所属时区的情况下,才可以利用 .NET Framework 中提供的时区支持。 但通常情况并非如此,特别是在 Web 或网络应用程序中。
|
转载地址:http://tllgb.baihongyu.com/