DateTimeKind.Utc); long utcTickets = utcTime.Ticks - startT

时间:2021-12-26 08:38:48

2.c# DateTime在实例化的时候如果为指定DateTimeKind,在转换的时候默认是要转换的Kind的对立。。

3.在计算机中看到的UTC时间都是从(1970年01月01日 0:00:00)开始计算秒数的。

所看到的UTC时间那就是从1970年这个时间点起到具体时间共有几多秒。 这个秒数就是Unix时间戳。

4.所以Unix时间戳的计算必然要统一时间进行计算,好比计算本地时间2017-10-27 10:03的Unix时间戳,一种方法先把2017-10-27 10:03转换为UTC时间计算

另一种把1970年01月01日 0:00:00对应成本地时间进行计算

//如果DateTime在实例化的时候未指定DateTimeKind,转换为 UTCTime或者LocalTime的时候,默认是另一个格局 //UTCTime和GMT是一致的,以秒为单位 DateTime time = new DateTime(2017, 10, 27, 10, 3, 0);//2017-10-27 10:03 Console.WriteLine(time.Kind); DateTime utcTime = time.ToUniversalTime(); Console.WriteLine(utcTime);//{2017/10/27 2:03:00} DateTime localTime = time.ToLocalTime(); Console.WriteLine(localTime);//{2017/10/27 18:03:00} //计算本地时间2017-10-27 10:03 Unix时间戳 要领一:转换为UTC时间 DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); long utcTickets = utcTime.Ticks - startTime.Ticks; //计算本地时间2017-10-27 10:03 Unix时间戳 要领一:转换为UTC时间 DateTime startLocalTime = startTime.ToLocalTime(); long localTickets = time.Ticks - startLocalTime.Ticks; Console.WriteLine(utcTickets == localTickets); //DateTime.Ticks是 计时周期,,相当于100奈秒(1奈秒即是十亿分之一秒),转换成秒的时候要除以 10000000 //unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所颠末的秒数,不考虑闰秒。 long utcSeconds = utcTickets / 10000000; //1509069780 可以通过Unix时间戳站长工具验证 //将Unix时间戳转换为本地时间 DateTime tt = startTime.AddSeconds(utcSeconds).ToLocalTime(); Console.WriteLine((tt == time) + ":" + tt);

输出功效:

DateTimeKind.Utc); long utcTickets = utcTime.Ticks - startT