首页 > 代码库 > DateTime如何存储时间

DateTime如何存储时间

分析问题

  System.DateTime提供了时间的存储和操作。一个DateTime的对象,就表示了某个时间点。.NET小组把DateTime设计成结构,所以DateTime是值类型的。

  和很多其他系统一样,DateTime结构使用一个长正数来存储时间,并且通过只读公共属性Ticks提供访问接口。DateTime所能代表的最小时间是0001年1月1日0时0分0秒,而存储时间的长整数则代表从最小时间到代表时间经过的刻度数(Ticks),其中一个刻度数代表一个毫微秒,所以DateTime的精度就是百毫微秒。从内部来看,存储时间的是一个64位长的长整数,但是DateTime只使用该长整数中的62位来存储时间,而另外两位则用来存储该时间是否是UTC时间的标志,关于UTC时间将在后续章节中有所覆盖,这一点可以从私有属性InternalTicks的代码中得到证实:

private long InternalTicks{  get  {    //屏蔽了最高的二位,只使用低62位    return (((long) this.dateData) & 0X3fffffffffffffffL));    }    }

  当程序员操作时间时,需要获得诸如日期、年份等贴近现实世界的时间表示。DateTime结构使用一个名为GetDatePart的方法来转换存储的长整数为真正的时间。诸如Year、Month、Day等公共属性都通过调用GetDatePart方法来得到需要的值。所以,DateTime并不额外地存储年份、月份等数值,所有操作从根本上来说都针对存储的长整数来进行。

答案

  DateTime结构内部存储一个64位长的整数,其中的低62位用来代表时间,它表示从0001年1月1日0时0分0秒开始到表示的时间经过百毫微秒。