转自:https://blog.csdn.net/Allen_lv/article/details/132869729
UTC、RTC、UNIX时间戳、localtime 理解
UTC 时间
UTC是世界协调时间时,UTC 是现在全球通用的时间标准,全球各地都同意将各自的时间进行同步协调。UTC 时间是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以秒为单位的国际原子时所综合精算而成。 即每一个地方在同一时刻的UTC时间是相同的。可以在UTC 时间 网站上看到当前的UTC时间。
同时为了统一各地的时间, 引入了时区的概念:
从格林威治本初子午线起,经度每向东或者向西间隔15°,就划分一个时区,在这个区域内,使用相同的时间。实际划分可能根据国家、省份的边界来定。
用UTC+或UTC- 来表示各个时区的时间,比如中国的时区时间就是UTC+8。
RTC 时钟
实时时钟(Real-time clock,RTC)是指可以像时钟一样输出实际时间的电子设备,一般会是集成电路,因此也称为时钟芯片。可以把他想象成一个存储器,里面只存储了年月日时分秒这些数据,要怎么理解这些数据就看操作系统的区别了。
大部分操作系统的时间管理包括如下方面:
启动时根据硬件时钟设置系统时间
运行时通过 NTP 守护进程联网校正时间
关机时根据系统时间设置硬件时间。
UNIX 时间
是UNIX或类UNIX系统使用的时间表示方式:从UTC 1970年1月1日0时0分0秒起至现在的总秒数,不考虑闰秒。
localtime
可以把localtime想象成我们看到的正确的时间,就是UTC+时区偏移。localtime 与硬件时间有关,Linux 中,会认为硬件中存储的时间是 UTC 时间,它想让你看到localtime,就会在硬件中存储的时间的基础上加上时区的偏移。而在windows 中就认为硬件中存储的时间是UTC+时区偏移了,它会直接进行显示。这也是我们在电脑上装了双系统之后,时间会发生错乱的原因。
总结
总之,记住一点是很重要的,UTC时间,世界同一时刻任一地方的时间都是一样的,我们要看到正确的时间,是UTC+时区偏移。下面这个图也可以帮助理解一下。
研究一下UTC时间获取,如下
DateTime dt = DateTime.UtcNow;
另:
DateTime.UtcNow.ToString();//输出的是0时区的事件,
DateTime.Now.ToString();// 输出的是当前时区的时间,我们中国使用的是东八区的时间,所以差8个小时
以下是互相转换class位utc
class utc { public static int ConvertDateTimeInt(System.DateTime time) { double intResult = 0; System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); intResult = (time - startTime).TotalSeconds ; return (int)intResult; } public static DateTime ConvertIntDatetime(double utc) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); startTime = startTime.AddSeconds(utc); startTime = startTime.AddHours(8);//转化为北京时间(北京时间=UTC时间+8小时 ) return startTime; } //调用方法 // DateTime utcNow = DateTime.Now.ToUniversalTime(); // double utc= ConvertDateTimeInt(utcNow); // DateTime dtime = ConvertIntDatetime(utc); }
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Allen_lv/article/details/132869729