相关概念
Ticks:表示0001 年 1 月 1 日午夜 12:00:00 以来所经历的 100 纳秒数,即Ticks的属性为100纳秒(1Ticks = 0.0001毫秒)。
Unix时间戳:是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
公式:1秒=1000毫秒,1毫秒=1000微秒,1微秒=1000纳秒,1毫秒=10000纳秒
DateTime
表示时间上的一刻,通常以日期和时间表示。包括一个Kind属性,该属性提供有关日期和时间所属时区的有限信息。
Kind:DateTimeKind.Local(本地),DateTimeKind.Utc(UTC),DateTimeKind.Unspecified(未指定)
除非特定的 DateTime 值表示 UTC,否则日期和时间值通常不明确的或其可移植性受限。
DateTimeOffset
表示一个时间点,通常以相对于协调世界时 (UTC) 的日期和时间来表示。该DateTimeOffset结构包含一个DateTime值和一个 Offset 属性,该属性定义当前DateTimeOffset实例的日期和时间与协调世界时 (UTC) 之间的差异。 由于它准确地定义了相对于 UTC 的日期和时间,因此DateTimeOffset结构不包含 Kind 成员。
DateTime thisDate=new DateTime(2021,7,10,10,0,0);
DateTimeOffset thisTimeOffset=new DateTimeOffset(thisDate,new TimeSpan(8,0,0));//2021/7/10 10:00:00 +08:00
提示:由于DateTime没有时区信息,所以优先考虑使用DateTimeOffset
TimeZoneInfo
表示世界上的任何时区,替代之前的TimeZone。
属性
BaseUtcOffset 获取当前时区的标准时间与协调世界时 (UTC) 之间的时差。
DaylightName 获取当前时区的夏令时的显示名称。
DisplayName 获取表示时区的一般显示名称。
Id 获取时区标识符。
Local 获取表示本地时区的TimeZoneInfo对象。
StandardName 获取时区的标准时间的显示名称。
SupportsDaylightSavingTime 获取一个值,该值指示时区是否具有任何夏令制规则。
Utc 获取表示协调世界时 (UTC) 区域的TimeZoneInfo对象。
重载
ConvertTime(DateTime, TimeZoneInfo)将时间转换为特定时区的时间。
ConvertTime(DateTimeOffset, TimeZoneInfo)将时间转换为特定时区的时间。
ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo)将时间从一个时区转换到另一个时区。
TimeSpan
TimeSpan 结构表示时间间隔。 它的两个典型用途是:
1、反映两个日期和时间值之间的时间间隔。 例如,两个 DateTime 值相减将返回 TimeSpan 值。
2、测量运行时间。 例如, Stopwatch.Elapsed 属性返回一个 TimeSpan 值,该值反映自调用 Stopwatch 开始测量运行时间的其中一个方法以来经过的时间间隔。
TimeSpan还可以表示不引用日期的时间,仅仅有时间无日期,此用法与 DateTime.TimeOfDay 和 DateTimeOffset.TimeOfDay 属性类似。
TimeSpan timeOfDay=new TimeSpan(10,20,0);//10:20:00
数据库中日期存储格式
最好采用bigint来存储UTC时间戳,因为有了时刻信息,就可以根据用户自己选择的时区,显示出正确的本地时间。所以,最好的方法是直接用长整数long表示,在数据库中存储为BIGINT类型。