Java服务端时区的几点思考
最近半年来开发的几个模块,涉及到了预定,检查,和查询。每个模块相同的都遇到了时间的处理,每次遇到的问题都不太一样。总结一下,避免以后走弯路。
时区概念
时区(Time Zone)是地球上的区域使用同一个时间定义。1884年在华盛顿召开国际经度会议时,为了克服时间上的混乱,规定将全球划分为24个时区。
GMT,UTC,UNIX时间戳
GMT,格林尼治时间。理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。但由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达16分钟。原因在于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间基于天文观测本身的缺陷,已经不再被作为标准时间使用。
UTC,协调世界时(英:Coordinated Universal Time ,法:Temps Universel Coordonné),又称世界统一时间,世界标准时间,国际协调时间。作为调整,引入了闰秒机制。英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。UTC与GMT的时间差距不大,但是因为GMT的缺陷,UTC已被作为世界统一的时间标准。
UNIX时间戳,从协调世界时1970年1月1日0时0分0秒起至现在的总秒数,不考虑闰秒 这么做应该是为了简化逻辑。
任何一个绝对的时间点,绝对的时间是一致的,只不过人为地划分了时区以后,我们以一个标准去工作学习,休息。在格林尼治的哥们吃着炸鱼薯条作为午饭抱怨腐国伙食差的时候,身在北京的我们已经看完了新闻联播,而此时的在洛杉矶的老美可能刚刚进入梦乡。
Java内部的时间计算我的理解是在值的计算都以Long型的Unix时间戳计算,但是在转成Date,或者使用DateFormat进行格式化输出为方便人类识别的时候,会结合时区进行转化。
在日常的和日期相关的计算中,常见有将Date转换为固定格式的字符串,或者将一定格式的字符串转换为日期。在这两个过程中,有时会难以思考其中的过程。
其实形如”2017-05-31 22:09:00”这样的字符串时间并没有时区的概念,而Unix时间戳则是某个时刻的绝对时间,也就是某个时刻零时区的绝地时间。
SimpleDateFormat在实例化的时候,会查看是否手动制定了时区,如果有的话使用指定的时区,否则使用系统默认的时区;SimpleDateFormat进行字符串解析的时候,会认为这个时间是内部持有那个时区的时间,然后将这个时区转换为同一时刻的零时区Unix时间戳。
在使用SimpleDateFormat将一个Date时间转为为固定格式的时间时候,实际就是对字符串解析过程的逆过程。
另外在使用Date date = new Date(Long timeStamp)的时候,Date内部也持有了一个TimeZone对象,在使用System.out.println(date)的时候会自动使用内部的时区对象进行字符串的转化。
其实无论怎样转化,只要服务端使用统一的标准,可以减少不同时区之间的转换和思考过程,更不易产生错误。
客户端的时间是不可信的,一定要使用服务端时间。
服务端的时间在进行国际化的时候,需要考虑时区对业务的影响。
时区除了影响时间值的计算外,对某些字符串信息的格式化也有重要影响。
Java服务端时区的几点思考相关推荐
- app及Java服务端实现JT808协议的定义解析
app及Java服务端实现JT808协议的定义解析,可以用做行车记录仪等的app. 网上很多帖子已经对JT808协议做了说明,我在这里就不做过多的赘述了. 最近接到一个项目是打车类的,所以对这协议做了 ...
- android+okhttp+java服务端(tomcat)+mysql实现登录注册
先上代码(文章结尾有遇到的问题和对应解决方案) android客户端 >android:app-build.gradle 1.添加okhttp依赖,具体根据自己的okhttp包来决定 depen ...
- Flex通信-Java服务端通信实例
Flex与Java通信的方式有很多种,比较常用的有以下方式: WebService:一种跨语言的在线服务,只要用特定语言写好并部署到服务器,其它语言就可以调用 HttpService:通过http请求 ...
- 聊一聊 Java 服务端中的乱象
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:阿里巴巴中间件 查尔斯·狄更斯在<双城记>中写道 ...
- 那些年,我们见过的 Java 服务端乱象
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 Photo by The Book Tutor @Youtube 文 | 陈昌毅 导读 查尔斯 ...
- MobileIMSDK怎样修改服务端核心jar包的源码并替换掉Java服务端的jar包
场景 MobileIMSDK怎样将Java服务端运行起来以及打成jar包运行: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11 ...
- 人人都能掌握的Java服务端性能优化方案
转载自 人人都能掌握的Java服务端性能优化方案 作为一个Java后端开发,我们写出的大部分代码都决定着用户的使用体验.如果我们的代码性能不好,那么用户在访问我们的网站时就要浪费一些时间等待服务器的响 ...
- 那些年,我们见过的 Java 服务端“问题”
导读 明代著名的心学集大成者王阳明先生在<传习录>中有云: 道无精粗,人之所见有精粗.如这一间房,人初进来,只见一个大规模如此.处久,便柱壁之类,一一看得明白.再久,如柱上有些文藻,细细都 ...
- 那些年,我们见过的Java服务端乱象
导读 查尔斯·狄更斯在<双城记>中写道:"这是一个最好的时代,也是一个最坏的时代."移动互联网的快速发展,出现了许多新机遇,很多创业者伺机而动:随着行业竞争加剧,互联网 ...
最新文章
- C# 视频多人脸识别的实现
- 商品和服务税收分类编码表_如何设置客户编码和商品编码?(附操作图)
- NYOJ 767 因子和
- MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP
- 【转】【天道酬勤】 腾讯、百度、网易游戏、华为Offer及笔经面经
- unity 继承了 获取_为什么说Unity能用单纯脚本实现的功能,尽量避免继承MonoBehavior,保持纯粹性?...
- SQL 常用语句大全
- 知网研学不同电脑端同步无效问题
- 【20保研】复旦大学2019年大数据学院全国优秀大学生夏令营活动方案
- 阿里云服务器修改名称
- 学一点Wi-Fi:DPP(WiFi Easy Connect)
- 解决项目部署到阿里云服务器邮件发送失败的方法
- 修改数据表之添加主键约束
- 小米电视4a系统android,小米电视4A请别糟蹋“人工智能”这几个字!
- 用python做PDF本地化压缩,新增多进程
- 拼音反查(转自大富翁)
- 浅谈:为什么vue和react都选择了Hooks?
- 李开复、沈向洋的恩师:印度农村走出的图灵奖得主
- html设置ios状态栏颜色,iOS 修改状态栏颜色
- 【狮子数学】chapter2-05-单调性