最近半年来开发的几个模块,涉及到了预定,检查,和查询。每个模块相同的都遇到了时间的处理,每次遇到的问题都不太一样。总结一下,避免以后走弯路。

  1. 时区概念

    时区(Time Zone)是地球上的区域使用同一个时间定义。1884年在华盛顿召开国际经度会议时,为了克服时间上的混乱,规定将全球划分为24个时区。

  2. 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服务端时区的几点思考相关推荐

  1. app及Java服务端实现JT808协议的定义解析

    app及Java服务端实现JT808协议的定义解析,可以用做行车记录仪等的app. 网上很多帖子已经对JT808协议做了说明,我在这里就不做过多的赘述了. 最近接到一个项目是打车类的,所以对这协议做了 ...

  2. android+okhttp+java服务端(tomcat)+mysql实现登录注册

    先上代码(文章结尾有遇到的问题和对应解决方案) android客户端 >android:app-build.gradle 1.添加okhttp依赖,具体根据自己的okhttp包来决定 depen ...

  3. Flex通信-Java服务端通信实例

    Flex与Java通信的方式有很多种,比较常用的有以下方式: WebService:一种跨语言的在线服务,只要用特定语言写好并部署到服务器,其它语言就可以调用 HttpService:通过http请求 ...

  4. 聊一聊 Java 服务端中的乱象

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:阿里巴巴中间件 查尔斯·狄更斯在<双城记>中写道 ...

  5. 那些年,我们见过的 Java 服务端乱象

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 Photo by The Book Tutor @Youtube 文 | 陈昌毅 导读 查尔斯 ...

  6. MobileIMSDK怎样修改服务端核心jar包的源码并替换掉Java服务端的jar包

    场景 MobileIMSDK怎样将Java服务端运行起来以及打成jar包运行: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11 ...

  7. 人人都能掌握的Java服务端性能优化方案

    转载自 人人都能掌握的Java服务端性能优化方案 作为一个Java后端开发,我们写出的大部分代码都决定着用户的使用体验.如果我们的代码性能不好,那么用户在访问我们的网站时就要浪费一些时间等待服务器的响 ...

  8. 那些年,我们见过的 Java 服务端“问题”

    导读 明代著名的心学集大成者王阳明先生在<传习录>中有云: 道无精粗,人之所见有精粗.如这一间房,人初进来,只见一个大规模如此.处久,便柱壁之类,一一看得明白.再久,如柱上有些文藻,细细都 ...

  9. 那些年,我们见过的Java服务端乱象

    导读 查尔斯·狄更斯在<双城记>中写道:"这是一个最好的时代,也是一个最坏的时代."移动互联网的快速发展,出现了许多新机遇,很多创业者伺机而动:随着行业竞争加剧,互联网 ...

最新文章

  1. C# 视频多人脸识别的实现
  2. 商品和服务税收分类编码表_如何设置客户编码和商品编码?(附操作图)
  3. NYOJ 767 因子和
  4. MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP
  5. 【转】【天道酬勤】 腾讯、百度、网易游戏、华为Offer及笔经面经
  6. unity 继承了 获取_为什么说Unity能用单纯脚本实现的功能,尽量避免继承MonoBehavior,保持纯粹性?...
  7. SQL 常用语句大全
  8. 知网研学不同电脑端同步无效问题
  9. 【20保研】复旦大学2019年大数据学院全国优秀大学生夏令营活动方案
  10. 阿里云服务器修改名称
  11. 学一点Wi-Fi:DPP(WiFi Easy Connect)
  12. 解决项目部署到阿里云服务器邮件发送失败的方法
  13. 修改数据表之添加主键约束
  14. 小米电视4a系统android,小米电视4A请别糟蹋“人工智能”这几个字!
  15. 用python做PDF本地化压缩,新增多进程
  16. 拼音反查(转自大富翁)
  17. 浅谈:为什么vue和react都选择了Hooks?
  18. 李开复、沈向洋的恩师:印度农村走出的图灵奖得主
  19. html设置ios状态栏颜色,iOS 修改状态栏颜色
  20. 【狮子数学】chapter2-05-单调性

热门文章

  1. ♥♥C站最全NCRE四级数据库总结(时刻更新,建议收藏!)
  2. 汇率兑换查询 API数据接口
  3. Linux命令详解之 touch
  4. 奥运会数据集可视化分析
  5. 【错误笔记】error: expected declaration specifiers or '...' before XXX
  6. PyTorch 单卡多卡训练模型常用命令
  7. 认识爬虫:如何使用 requests 模块根据电影类型爬取豆瓣电影排名前20的信息与评分
  8. 安装jieba库方法
  9. 行稳致远,共建IDC产业优质生态圈
  10. java八进制写法_Java中8进制和16进制的表示方法