2024年4月29日发(作者:)
时间戳或称Unix时间戳(UnixTimeStamp)
是从
1970
年
1
月
1
日开始计算的,即计算时间到
1970
年
1
月
1
日
0
时(北京时间
8
时)的总秒数。
在此补充一个小知识:为什么计算机时间和众多编程语言要从
1970
年
1
月
1
日开始算
起?在此有
2
种解释,最懒的解释是很多编程语言起源于
UNIX
系统,而
UNIX
系统认为
1970
年
1
月
1
日
0
点是时间纪元,所以为我们常说的
UNIX
时间戳是以
1970
年
1
月
1
日
0
点为
计时起点时间的;深入的解释是最初计算机操作系统是
32
位,而时间也是用
32
位表示。
Integer
在
JAVA
内用
32
位表示,因此
32
位能表示的最大值是
2147483647
。另外
1
年
365
天的总秒数是
31536000
,
2147483647/31536000=68.1
,也就是说
32
位能表示的最长时间
是
68
年,从
1970
年开始的话,加上
68.1
,实际最终到
2038
年
01
月
19
日
03
时
14
分
07
秒,便会到达最大时间,过了这个时间点,所有
32
位操作系统时间便会变为
10000000
,算下来也就是
1901
年
12
月
13
日
20
时
45
分
52
秒,这样便
会出现时间回归的现象,很多软件便会运行异常了。
到这里,我想问题的答案已经显现出来了,那就是
:
因为用
32
位来表示时间的最大间隔
是
68
年,而最早出现的
UNIX
操作系统考虑到计算机产生的年代和应用的时限综合取了
1970
年
1
月
1
日作为
UNIXTIME
的纪元时间
(
开始时间
)
,至于时间回归的现象相信随着
64
为操作系统的产生逐渐得到解决,因为用
64
位操作系统可以表示到
292,277,026,596
年
12
月
4
日
15
时
30
分
08
秒,相信我们的
N
代子孙,哪怕地球毁灭那天都不用愁不够用了,因
为这个时间已经是千亿年以后了。
c#时间戳
c#
的时间戳却是
13
位的,那么我们处理的时候的代码如下:
将时间转换为时间戳:
//将时间转换为时间戳
privatelongConvertDateTimeToTimeStamp(DateTimetargetTime)
{
DateTimestartTime=lTime(newDateTime(1970,1,1));
longtsa=()/10000;
returntsa;
}
将时间戳转换为时间:
//将时间戳转换为时间
privateDateTimeConvertTimeStampToDateTime(stringtimeStamp)
{
DateTimestartTime=lTime(newDateTime(1970,1,1));
longlTime=(timeStamp+"0000");
TimeSpantoNow=newTimeSpan(lTime);
DateTimetargetTime=(toNow);
returntargetTime;
}
发布者:admin,转转请注明出处:http://www.yc00.com/web/1714327092a2425447.html
评论列表(0条)