博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择
阅读量:2504 次
发布时间:2019-05-11

本文共 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/

你可能感兴趣的文章
破天荒头一篇
查看>>
spring validator 注解
查看>>
C#根据淘宝接口网址获取客户端访问IP和网络运营商
查看>>
PAT乙级1008. 数组元素循环右移问题 (20)
查看>>
VBA中两个整数相除返回向下取整的整数结果?
查看>>
JVM-垃圾回收
查看>>
python中的多继承
查看>>
ubuntu-14.04.1-desktop上安装配置JDK1.8的环境变量
查看>>
VS2013 添加已有文件夹
查看>>
摄影扫盲
查看>>
POJ 2388 - Who's in the Middle
查看>>
python 计时程序运行时间
查看>>
【最小生成树+贪心】BZOJ1821: [JSOI2010]Group 部落划分 Group
查看>>
ios-自动布局指南:入门
查看>>
NODEJS 搭建本地文件服务器
查看>>
8086汇编指令速查手册
查看>>
【Shell脚本学习4】几种常见的Shell
查看>>
DataStructure part1 基础概念
查看>>
201521123007《Java程序设计》第11周学习总结
查看>>
BitLocker 加密工具挂起和恢复命令行(windows7)
查看>>