做多了国际化项目,你怎么处理时区不同的各种blabla...问题
我们做的的都是国际化大项目,今天发现了个大bug,没错!是时区不同引起的,如果你觉得这还不简单,这样,这样,再这样不就可以了吗?我只能呵呵了。
先来普及一下基础知识 :
1、地球分为24时区,北京位于东八区,伦敦位于零时区,东京位于东九区,北京8点时,东京9点,伦敦0点。也就是北京比伦敦早8个小时,东京比北京早1个小时。
2、时间戳:可以理解为时间间距,定义为格林威治时间1970年01月01日00时00分00秒,也就是你在伦敦当前时间戳为:从1970年01月01日00时00分00秒到现在再转化为毫秒,如果在北京的话:从1970年01月01日08时00分00秒到现在再转化为毫秒。但是其实是一样的,因为间距不变啊。放张大图自己领会。。。

案例:设备聚合数据端在伦敦,上传到监控系统,监控系统也就是我们的项目在北京。用户A伦敦,用户B在东京。现在时间分为:设备端、browser端,和sever端
场景一:用户A在2017/8/4 00:00:00(伦敦的)和用户B 在2017/8/4 9:00:00(东京的)上线,我在北京查询用户A和用户B的上线时间。
分析:其实A和B是同时上线的,无论是按照设备端,还是browser端。如果系统按照browser端时间设置,我将看到A和B在北京时间2017/8/4 08:00:00同时上线。如果系统按照设备端,我将看到A和B在伦敦时间2017/8/4 00:00:00同时上线.。。。这个比较好理解。
场景二:我在北京2017/8/4 08:00:00查询用户A近24小时的流量数据。
分析:同样,我想知道的是北京时间往前推24小时的流量,那到了伦敦也同样是伦敦时间往前推24小时,设备聚合伦敦近24小时数据量,是可以的。也就是无论安照设备端还是browser端显示都是可以的。
场景三:我在北京2017/8/4 07:00:00查询用户A近1/7/30天的流量数据。(数据聚合都是在每天的零点)
分析:这样按照前面两种就会出现问题:北京时间8/4 07:00:00近一天的也就是8/3 00:00:00到8/4 00:00:00,那到了伦敦当前时间为8/3 23:00:00,近一天的也就是8/2 00:00:00到8/3 00:00:00,这样的话,统计时间的开始时间和结束时间根本不对应啊。统计时间应该为伦敦轴下方的那一段。也就是放张大图,自己领会。。。

那怎么办呢?这样的话,我们只能按照设备端时间查询显示,没办法啊,因为如果按照browser端的00:00:00,那设备端为16:00:00数据还没有聚合。
做多了国际化项目,你怎么处理时区不同的各种blabla...问题的更多相关文章
- 参与国际化项目需遵循的java命名规范
笔者最近帮助一些朋友应聘远程工作(一般都是一些国外的项目),国外的项目负责人一般都会要求提供github账号或者一些源代码,很多朋友在这一关就被筛选掉了,其中不乏一些我认为技术非常厉害的行业大牛,他们 ...
- BIP_开发案例10_BI Publisher报表国际化多语言的实现(案例)
2014-12-26 Created By BaoXinjian
- [原创]Java项目统一UTC时间方案
Java项目统一UTC时间方案 作者:Gods_巨蚁 引言 近期团队的个别项目在进行框架升级后,部分时间值存在8小时误差,原因是错误的将数据库中的时间数据理解成了UTC时间(旧版本认为是北京时间) 考 ...
- docker时区正常,但java获得的时间早了8小时解决方法
我解决容器时区的方法是挂载宿主机的/etc/localtime 到容器的/etc/localtime,这时输入date命令容器时区显示正常,但是跑在容器中的java项目取到的时间却早了8小时. 查阅相 ...
- SpringBoot整合国际化I18n
本文主要实现的功能: 从文件夹中直接加载多个国际化文件 后台设置前端页面显示国际化信息的文件 实现 国际化项目初始化,简单看下项目的目录和文件 在resource下创建国际化文件 messages.p ...
- NET使用ABP框架搭建项目
NET使用ABP框架搭建博客项目(一) 有很多学NET开发的小伙伴建项目都比较茫然,我用什么开发?我都使用什么框架?我怎么起名字?种种问题,让一些低等.中等的工程师(甚至是高级工程师)很烦躁. 推荐一 ...
- php 学习笔记之关于时区的那点事
科普一下什么是时区 众所周知,地球绕着太阳转的同时也会自转,因此同一时刻不同地区所接收到太阳照射的情况不同,所以有的地区是日出,有的地区是日落,还有的地区可能是黑夜. 既然地球上的不同地区时间不同,那 ...
- docker容器时区问题
原文:docker容器时区问题 版权声明:本文为博主原创文章,随意转载. https://blog.csdn.net/Michel4Liu/article/details/80890868 本系列目录 ...
- ocp11g培训内部教材_051课堂笔记(047)_SQL
OCP 051课堂笔记 目录 OCP 051课堂笔记... 1 第一章.Oracle命令类别:... 4 第二章.SQL的基本函数... 4 2.1 单行函数与多行函数... 4 2.2 单行函数的几 ...
随机推荐
- centOS7网络配置(nmcli,bonding,网络组)
关于网络接口命名 CentOS 6之前,网络接口使用连续号码命名: eth0. eth1等,当增加或删除网卡时,名称可能会发生变化.CentOS 7使用基于硬件,设备拓扑和设置类型命名. 网卡命名机制 ...
- Spring第七篇【Spring的JDBC模块】
前言 上一篇Spring博文主要讲解了如何使用Spring来实现AOP编程,本博文主要讲解Spring的对JDBC的支持- 对于JDBC而言,我们肯定不会陌生,我们在初学的时候肯定写过非常非常多的JD ...
- 为异常处理做准备,熟悉一下WinDbg工具
为异常处理做准备,熟悉一下WinDbg工具 马上开始异常处理第二讲,但是在讲解之前,还有熟悉一下我们的WinDbg工具,当然你如果熟悉这个工具,那么就可以不用看了. 一丶熟悉WinDbg界面 刚开始打 ...
- 翻译 | Thingking in Redux(如果你只了解MVC)
作者:珂珂(沪江前端开发工程师) 本文原创,转载请注明作者及出处. 原文地址:https://hackernoon.com/thinking-in-redux-when-all-youve-known ...
- 常用git指令
git checkout -b newBranchName //与当前分支内容相同! git checkout -b 本地分支 origin xxx//远程分支 在本地新建一个分支,并把远程分支的代码 ...
- Java IO学习笔记(一)
一.概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.在两设备间的传输的数据称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,以进行数据操作. 二.流分类 数据类型 ...
- LinkedHashMap 源码解析
概述: LinkedHashMap实现Map继承HashMap,基于Map的哈希表和链该列表实现,具有可预知的迭代顺序. LinedHashMap维护着一个运行于所有条目的双重链表结构,该链表定义了迭 ...
- Quartz源码——QuartzSchedulerThread.run() 源码分析(三)
QuartzSchedulerThread.run()是主要处理任务的方法!下面进行分析,方便自己查看! 我都是分析的jobStore 方式为jdbc的SimpleTrigger!RAM的方式类似分析 ...
- js中set和get的用法
get 语句作为函数绑定在对象的属性上,当访问该属性时调用该函数. set 语法可以将一个函数绑定在当前对象的指定属性上,当那个属性被赋值时,你所绑定的函数就会被调用. eg: var log = [ ...
- 应用程序PING发出的是什么报文?
Ping位于用户层,一般用来测试一台主机是否可达,该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显 应答