「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」
嗨,家人们,我是bug菌,我又来啦。今天我们来聊点什么咧,OK,接着为大家更Ubuntu系列文章吧。大家认真听好好学!好伐?
一:环境说明
环境:Ubuntu20.04
二:前言
跑项目偶然在执行新增sql,凡是涉及时间字段,写入时间都与北京时间差8时,就很离谱。可明明Ubuntu系统显示时间跟Windows时间一致啊。接下来,我进行了一段神代码测试!
写段main函数获取时间试试,果然不出我所料;运行结果情况控制台。
好家伙,我这是有多拼命,凌晨两点还在奋斗码代码!这肯定是哪里出问题了,可我明明也记得当初安装完Ubuntu后也是重新设置了系统时间,这怎么办呢?查阅相关资料才知道,原来是这样:
出现这种情况的原因是 Windows 和 Ubuntu它们在默认情况下看待硬件时间(主板上的BOIS显示的时间)的方式不一样;
在Linux计算机上,拥有两个时间,一个是
硬件时间
(BIOS中记录的时间,称为hwclock),另一个是
操作系统时间
(osclock);
你再联想下,java程序获取的时间都是GMT时间(格林尼治时间(0时区的时间)),而系统是北京时间,应该是GMT+8,刚好相差8小时,所以直接推断,Ubuntu硬件时间存在时区差;
我们先来查询下系统时钟和时间设置;直接使用如下指令
timedatectl
复制代码
果然时区默认转回了美国时区,难怪!
在此,就有必要给科普下关于上方获取到的三时间概念:
- UTC,即Universal Time Coordinated, 协调世界时
- GMT,即Greenwich Mean Time, 格林尼治平时
- RTC时间,即Real-time clock,是电脑的硬件时间
Windows 与 Linux 缺省看待系统硬件时间的方式是不一样的:
Linux 时钟分为系统时钟(System Clock)和硬件(RTC)时钟。Linux把硬件时间当作 UTC,系统时间是UTC时间经过换算得来的。比如说北京时间是GMT+8,则系统中显示时间是硬件时间+8。
Windows把系统硬件(RTC)时间当作本地时间(local time),即系统时间跟BIOS中显示的时间(RTC)是一样的。
那知道原因就知道怎么解决了,只需要把时区改成国内的即可!
设置时区
timedatectl set-timezone "Asia/Shanghai"
复制代码
来,检测一下,康康时区是否设置成功了:
时区已经设置成功了; 我们再运行下main 函数;
大功告成!new Date获取到的硬件时间 也与系统时间一致了;你学会了?
综上,就是本期干货教学啦,若是不够吃,bug菌再想想办法~
三、热文推荐
... ...
若是想要了解更多Ubuntu相关文章,请关注bug菌的专栏《Ubuntu零基础教学》,bug菌会持续更新哒;手把手教你如何吃透Ubuntu!我用双手成就你的梦想。
----------------------------------------------------------------------------------------------
如果觉得这篇文章对你有所帮助,还请不忘在文章的左下角,直接pia的一下点亮它 up up up!!!若是我,不用犹豫直接进我的收藏夹吃灰去吧!不管以后用不用的上,先吃上灰再说,哈哈哈哈哈嗝~~
----------------------------------------------------------------------------------------------
❤如果文章对您有所帮助,就请在文章末尾的左下角把大拇指点亮吧!(#^.^#);
❤如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;
❤对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】;
❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);
❤版权声明:本文为博主原创文章,转载请附上原文出处链接和本文声明,版权所有,盗版必究!(*^▽^*).




近期评论