坑(一)
最近偶然跟总监聊起服务器,谈到了Linux 。猛然想到,我大三时也花过一段时间去尝试Linux,零零总总也学到了一些知识。后来转投Java,开始忙着论文工作,彻底将Linux抛弃了。这次决心再度捡起来,虽说捡了不一定会变成我的,但多多尝试,多少会学点东西,这是没错的。
电脑原本是Win7和Win10双系统,因此直接格掉Win7上Linux,在版本选择上纠结了很久。大三时装的是Ubuntu,这次想尝新,于是换成了CentOS。装了不到一天,看到了一款不错的国产Linux ---- Deepin Linux
, 画风清新,评价不错,我想使用这款从Win到Linux的过渡应该比较平滑吧,于是回家立马又换成了Deepin。又是一些熟悉的问题来了,MBR,GRUB
这些。搞定,开机!两边都运行正常,但是,时间怎么是错的?Win10下的时间是错的,Linux的时间也同样是错的。虽然可以手动调整时间,但总觉得不完美,肯定是哪里出了问题。既然两个完全不相干的系统都出错,那出错的地方肯定是它们的相交点,猛然想起,BIOS!我的电脑用了四年了,没换过电池,这次应该是主板供电出现了异常。进入BIOS一看,果然时间错误,更改过来后,两边时间一直正确。好了,可以安心睡觉了。
坑(二)
一觉醒来,打开电脑。Win10时间继续出错,Linux时间正常。整个人又炸毛了。Win10的时间很有意思,和北京时间整整相差8小时。时区错了?没错!但无论怎么调也没反应。于是只能网上查找一番,发现了两个概念:
UTC即Universal Time Coordinated,协调世界时
GMT 即Greenwich Mean Time,格林尼治平时
这两个只是时间的不同的计量方式,格林尼治时间是格林尼治天文台通过每天观测太阳经过本初子午线的的瞬间来制定时间,由于地球自转速度是不均匀的而且逐渐变慢,所以这种计量方式是不准确的,网络时间协议
使用的就是UTC时间。 协调世界时是由国际计量大会颁布的,使用原子钟
计时,误差极低。
windows和linux缺省看待系统时间的方式是不一样的。
windows以系统硬件时间为准,即操作系统显示的时间。
而linux是把系统硬件时间当成了UTC时间
,系统显示的时间是在硬件时间上+8,即东八区的时间。
但我这种情况出现的原因是什么呢?个人猜想可能是打开linux时启动了自动对时,修改了时间,然后打开Win10,但发现Win10的时间服务已经停止,所以无法自动对时,显示为现在时间-8 。
解决方法很简单,在windows中添加注册表即可:
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
坑(三)
最近在开发过程中有这么一个操作,就是通过一款JS插件获取到了时间,然后以此为条件传到数据库中查询,无论怎样格式化或者变换都得不到正确的结果,很是头疼。
一般操作系统和编程语言涉及到时间的格式化或者计算都是通过UNIX时间戳
来实现的。时间戳
即格林威治时间1970年01月01日00时00分00秒到现在的总秒数,由于当时(甚至现在)计算机系统都是以32位为主,因此能用到的时间只有2^32秒,当时间到达2038年1月19日3时14分08秒时,数值位全部向前进1,导致符号位被置1,其余31位为0。介时,将出现时间回归
的情况,系统时间变为1901年12月13日20时45分52秒。为了应对这个问题,将来我们的计算机都会使用64位来计时,能用多久呢?可以用到世界末日都不成问题。
以上权当小知识记下了。那么问题来了,为什么这里行不通呢?不都是时间戳么?查阅了资料才发现,JS获取的时间戳是毫秒值……毫秒……值!多了三位数硬是眼瞎没看出来,无话可说啊。
完结
时间这玩意在现在的电子设备中无处不在,稀疏平常。在有的环境中,时间的错误可能会导致软件故障,系统瘫痪,甚至手机变砖块,好像苹果手机上就有发生过。这让我想起以前的手机,上个内存卡电话卡还要拼手速,慢了就要重新设置时间,特别是诺基亚,特别烦。后来用上了智能手机,这家伙可以和基站自动对时,非常方便,再也不用拿着手机问别人现在几点了,但总感觉那200块的手机上的时间走的比现在快多了,一转眼已是深夜11点,明天醒来就是2016的最后一天,闭上眼,感觉能看到毛娭
捧着一堆山寨手机的‘慈祥的笑容’,时间走的一直都很从容,走快走慢的从来都不是时间,而是不想服从时光脚步的坏家伙,总有那么一点幻想,总有那么一点野心,在脑海、在深夜、在梦中、回荡……回荡……
》》》》》》》》》》 2016-12-30 23:00:32《《《《《《《