2019独角兽企业重金招聘Python工程师标准>>>

这两天做了个测试程序放到cloudfoundry上,测试的时候突然发现系统中对日期时间类型的数据处理在云环境下存在问题。

仔细思考以后发现这个问题是一直存在的,只是以前自己做的系统没有考虑到多时区并发的问题而已。

现象:

开发环境:jdk 6, mysql,vaadin framework

所有的日期时间字段都用datatime类型存在mysql数据库中,部分时间的取得是在服务端用new Date(),部分时间是由客户端post上来,格式是“yyyy-MM-dd HH:mm:ss”。存储到数据库中时是格式化为“yyyy-MM-dd HH:mm:ss”插入datetime字段。

根据cloudfoundry对云应用的注意事项的提示,我们可以知道,我们无法预测APP会在哪台虚拟机上运行,不能上传文件到虚拟机(除非使用存储服务),因为下一次重启你的APP不一定在同一台机器上,你也不知道什么时候APP会重启;同样你也不会知道你的APP所驻留的虚拟机是什么时区以及地区。

所以,现有程序中的处理就有问题了,如果客户端的时区和服务端不同,所有的时间存储和依赖于时间值的查询都会是错的。

所以,要么存储时间时要同时存储时区,要么所有时间值都转换成一个统一的时区。

处理时考虑的因素:

mysql中的datetime是不存储时区的,而timestamp是utc时间,精确到秒,不能处理毫秒。而不同的数据库timestamp的处理是不一样的,例如ms sql里timestamp已经不建议使用了,也不承诺就是当时的时间戳。

java中的Date类型本身是utc时间,new的时候会记录环境时区,以及toString时根据记录的时区输出字符。

Date类型的getTime输出的永远是精确到毫秒的UTC时间,不用操心时区转换的问题。

结论:

使用8字节整数,数据库中用BIGINT来存储时间,存储前getTime()获得long型的utc时间后存储。取出时,获取后用new Date(long)生成日期类型,如要传回给客户端,根据客户端时区重设Date后传出。

转载于:https://my.oschina.net/fornews/blog/128419

系统开发中的时间类型的处理问题相关推荐

  1. MySQL中的时间类型

    时间是一类重要的数据,MySQL中有多种关于时间的类型可以选择.这篇文章主要介绍MySQL中的时间类型,主要参考MySQL文档:https://dev.mysql.com/doc/refman/8.0 ...

  2. MySQL时间戳和unix时间戳区别、MySQL中的时间类型

    文章目录 1 时间戳 1.1 unix时间戳(unix timestamp) 1.2 MySQL时间戳(timestamp) 2 MySQL中timestamp和datetime的不同点 3 MySQ ...

  3. 软件开发重要性_在软件开发中考虑时间的重要性

    软件开发重要性 by Crunch Tech 通过Crunch Tech 在软件开发中考虑时间的重要性 (The importance of time to think in Software Dev ...

  4. Mysql在sql中截取时间类型字段的年月日和时间-DATE_FORMAT() 函数

    Mysql在sql中截取时间类型字段的年月日和时间 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. 下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式.我们使用 N ...

  5. Android NDK开发之 Android系统开发中LOG的使用

    浅谈Android系统开发中LOG的使用 转自:http://blog.csdn.net/luoshengyang/article/details/6581828

  6. 关于视频直播系统开发中头像昵称修改方式的解决方案

    在php视频直播系统开发中,时常用到极光推送.极光IM来负责消息功能的实现,但是正常更新用户信息等功能,只会更新数据库信息,并不会同步更新到极光服务器,那么接下来我们就说一下如何更新极光用户头像及昵称 ...

  7. 手机直播系统开发中关于iOS获取图形验证码功能

    在手机直播系统开发中关于iOS获取图形验证码功能介绍,首先进入注册页面后请求图形验证码接口获取图形验证码的数字组合,然后加载到相应的页面上,在图形验证码页面我们定义了几个属性,字符串的数量.显示的线条 ...

  8. java时间定义什么类型_1 Java中的时间类型

    总结:sql中的时间转 util的时间直接赋值即可:反过来,必须先吧util下的时间转换成毫秒,再通过sql的构造器生成sql的时间格式. 1Java中的时间类型 java.sql包下给出三个与数据库 ...

  9. 如何在陪玩游戏系统开发中,快速实现音视频通信?

    其实在陪玩游戏系统开发过程中,快速实现音视频通信的方法就是寻找或调用别家的API,毕竟音视频通信涉及到的技术比较繁杂,像音视频采集.解码.处理等环节.而且采用三方的API,不仅能够实现更好的体验效果, ...

  10. mysql中的时间类型和比较大小

    mysql中的时间类型和比较大小 一.时间类型 二.时间比较 一.时间类型 mysql有五大时间类型: datetime 可以存储年月日时分秒类型的时间,如果在设计字段的时候可以设置获取当前时间,插入 ...

最新文章

  1. 博士生宿舍条件太好,本科生因疫情暂住惊到结巴!网友:不然咱读个博?
  2. Python 与 Excel结合
  3. python继承编程教程_Python实现通过继承覆盖方法示例
  4. 学习Docker从小白到入门
  5. 航海王_html_css3_旋转效果demo
  6. 恢复SQLSERVER被误删除的数据
  7. Hard Disk Drive HDU - 4788——24行代码AC,解题报告
  8. 作者:李翠平, 女, 中国人民大学信息学院教授、 博士生导师。
  9. Unity 脚本生命周期流程图
  10. 关于eclipase出现的problems during content assist报错问题
  11. python中的mul函数_Sympy:“Mul”对象没有分层函数的“cos”属性
  12. 我的Java开发学习之旅------求字符串中出现次数最多的字符串以及出现的次数...
  13. 橘子皮巧治咳嗽痰多 泡茶喝-转
  14. vue 多个回调_vue中多层组件间参数的传递、子孙组件回调父组件执行结果
  15. ETL介绍与ETL工具比较
  16. 关于Tricomi方程的类型分析与标准型求解
  17. php 除数 保留两位小数,c语言除法怎么保留小数
  18. 影刀RPA实操指南丨90%用户都会陷入的excel自动化误区
  19. Python之Selenium模拟浏览器
  20. 2021.01.05【读书笔记】丨生物信息学与功能基因组学(第四章 局部比对搜索基本工具-BLAST 下)

热门文章

  1. php 快速安装,PHP - 快速配置及安装
  2. 长春理工大学计算机科学与技术学分,计算机科学与技术专业本科人才培养方案-长春理工大学教务处.PDF...
  3. python 图表工具_7 款 Python 数据图表工具的比较
  4. firewalld-富规则使用内容事项:
  5. linux查看文件大小命令DU
  6. 30岁中专自学java,19岁中专毕业 工作两年感觉就是混日子 想再去学个软件编程 我这个学历学他有前途吗?...
  7. python3之udp
  8. 如何协助 MySQL 实现 Oracle 高级分析函数
  9. ASP.NET 批量更新
  10. 【转】Linux下发生段错误时如何生成core文件