程序中的时间问题 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

程序中的时间问题

发表时间:2020-10-19

发布人:葵宇科技

浏览次数:31

知识的盲区往往会影响到程序编程。对于只有锤子的人来说,所有问题都是钉子。

缘由:
前不久,一个做前端的同事联系我,他说一个时间控件接收到后端的数据后,显示时总是少了8个小时,他想用网上的个工具类,对时间进行加8的运算,以达到理想效果。

我以前,在一大厂里撸代码,发现所有跟时间格式化相关的,都会减8操作后,再格式化,而且注释说明了:转成utc时间(都已经知道UTC时间了,还这样搞)。

计算机的时间其实是一个长整型数,专业一点的术语叫时间戳,不同国家,或者不同地点,对同一时间的表示确不同,我现在的当前时间是:10:17,但在美国可能是12点,但时间戳都是一样的。我曾去西藏阿里,发现手机上的时间我别人手机相差了几个小时,原来是我设制自动适应时区。
个人pc上也可以手动设置时区:
在这里插入图片描述
Linux系统有一个专门的文件存储当前本地化的信息。

有了以上知识,解决方案就有了。

1.在代码中设置时区
在用SimpleDateFormat格式化日期时,用以下构造函数:

  public SimpleDateFormat(String pattern, Locale locale)

Locale 代表了地域信息.
优点:简单易用,在代码中写死,不用管运维怎么设制环境。
缺点:不利于国际化,要重复写代码,且以后不容易改动

2.设置jre运时环境的时区
在启动jar时,跟 上参数 “-Duser.timezone=GMT+8" ,GMT代表的是格林威冶,加8代表了东八区时间。
优点:方便全局设置,方便国际化。
缺点:要修改tomcat或其它中间件的启动参数。(这算个屁,改就改呗)

3.设置系统时区
可以修改Linux系统中的区域文件:/etc/timezone
优点:终极解决方案,一改全部改
缺点:终极解决方案,一改全部改,等等,我有个jar包里面全部用了+8的操作。……

3.根据http协议中自带的信息设置时区
http协议标准中,http 请求头中的Accept-Language 表示语言信息如:

 -H "Accept-Language: zh-CN,zh;q=0.9" ^

配置合spring 中的LocalResolve与i8s可以做到国际化,(当然也包括时间)
优点:实现国际化,什么时候时区由用户浏览器决定。
缺点:实现麻烦

4.docker容器中的方案
docker容器中的时区信息往往与系统的不一致,
方案一: 在制作镜像时替换掉镜像中的/etc/timezone,
方案二:在容器编排时将容器中的/etc/timezone映射成系统的/etc/timezone,

最后:那个前端问题
我查看了那个日期控件的文档,发现有设置区域信息的地方,解决!

我面试过很多人,也被很多人面试过,现在做java似乎都偏向于高层,网上动不动就是掉打阿里p8级架构师的课程。我真的不知道这是好事还是坏事。高并发,中间件等等,了解的人真的很多,有时面试时,就是在背答案,或有时聊源代码,但说到怎么扩展一个框架,就没有人知道了。公司里真的需要这样的程序员,或这样的高级架构角色吗?
如果是我,我宁可看重这些小事。我不信一行简单的代码都写不好,一个简单的算法都不知道,一个jse中的api都用不好,还有什么理由说那些高级东西呢。

相关案例查看更多