首页 > 代码库 > 什么是UTC时间,如何转换到UTC时间

什么是UTC时间,如何转换到UTC时间

分析问题

  UTC其实就是格林威治标准时间(GMT),它是在0度经度测量到的时间,每个地域的本地时间都和UTC时间有一个固定的时间差,有些地域实行夏令时,则那些地域的本地时间就是UTC时间加上时差再加上夏令时的影响。

  在本书前面的章节中已经介绍了,DateTime中用来存储时间的64位长整数只使用了低62位来代表时间,而高两位则是枚举的标志。DateTime的Kind属性公开了这个标志,Kind的代码更好地说明了这一特性:

 

  在很多情况下,当地时间和UTC时间需要进行相互转换。DateTime结构提供了ToUniversalTime和ToLocalTime两个方法,这两个方法不仅会改变存储的时间,并且会更改Kind标志。以下代码展示了这两个方法的使用方法。

using System;namespace Test{    class UTCLocal    {        static void Main()        {            DateTime date = DateTime.Now;            Console.WriteLine("当前本地时间:{0}", date.ToString());            Console.WriteLine("Kind标志:{0}", date.Kind.ToString());            //转换到UTC时间            DateTime newDate = date.ToUniversalTime();            Console.WriteLine("转换到UTC时间:{0}", newDate.ToString());            Console.WriteLine("新的Kind标志:{0}", newDate.Kind.ToString());            //转换到本地时间            DateTime backDate = newDate.ToLocalTime();            Console.WriteLine("转换回本地时间:{0}", backDate.ToString());            Console.WriteLine("转换回后的Kind标志:{0}", backDate.Kind.ToString());            Console.Read();        }    }}

  如读者所见的,两个方法的操作非常简便,但不要忽视了这两个方法对标志的修改,下面是程序的执行结果

注意

  本地时间和UTC时间的转换是会考虑夏令时的。

答案

  UTC是格林威治标准时间(GMT),它是在0度精度测量到的时间。通过ToUniversalTime和ToLocalTime方法可以在本地时间和UTC时间之间进行转换。两个方法在转换时会相应地设置保存时间的64位整数的高两位标志,并且转换的算法考虑了夏令时。