跨时区系统设计方案

news2025/1/10 10:31:12

一、背景

门店收银系统分布在澳洲、中国、新西兰,分跨不同时区,系统需要显示不同时区的时间,这是比较折腾的一件事,今天讲一下我们是怎么作的。

二、时区概念

时区

划分时区作用是为了统一时间,让各个区域12点都是正中午的时候,其实我没想明白为什么这么折腾,我这边18点是正中午有什么不可以的呢,这世界就是这样总喜欢把简单的事情搞复杂了,时区的划分以地球表面按经线从东到西划成一个个区域,每隔经度15°划分一个时区,规定相邻区域的时间相差1小时,,如下图所示。

格林尼治时间:英国皇家格林尼治天文台,UTC/GMT 0 (零时区)。

中国时区:有东五区、东六区、东七区、东八区、东九区,新疆在东五、东六、而东北在东九区,但解放后我们国家统一采用东八区的北京时间为准,这样我在云南晚上8点钟的太阳还是很亮。

澳大利亚时区:有东部时区(东十区)、中部时区(东9.5时区)、西部时区(东八区),还有夏令时(现在我们没管它)。

UTC:Coordinated Universal Time,世界统一时间,中国、西澳都是UTC+8,

GMT:Greenwish Mean Time ,以地球公转和自转来计算时间,而UTC以原子钟来计算时间。

UNIX时间戳:1970年1月1日(UTC/GMT的午夜)开始所经过的秒数。

三、操作系统、数据库、编程语言时区设置

1、Linux操作系统时区设置


北京时间8月3日15:04:59在两台机器执行命令查时区
# date -R
Tue, 03 Aug 2021 07:04:59 +0000 +0000用的是UTC0时区
Tue, 03 Aug 2021 15:04:59 +0800 +0800用的是UTC+8时区

一般阿里云中国区服务器默认都是UTC+8,阿里云海外机器UTC+0,亚马逊的是UTC+0,购买服务器后都需要确认一下。

#设置时区
tzselect #向导式的选择时区,选择大州、
国家和城市,然后在/usr/share/zoneinfo
下会生成时区的文件,将该文件覆盖/etc/localtime
即可完成时区设置。

2、MySQL数据库时区

3、Java时区

3.1 通过JVM参数指定时区

3.2 通过Java代码指定时区

这里吐槽一下,获取时区时没有Beijing,据说是历史问题。

时区设置优先级:Java语言时区设置>JVM时区设置>Linux /etc/localtime

四、收银系统跨时区设计

1、AWS RDS表中所有日期时间字段全部用int类型,只存储时间戳,不存具体日期格式数据。

2、AWS Linux使用的是UTC+0时区。

3、往数据库写入数据时全部使用UNIX时间戳。

4、门店表配置了对应时区,比如 Perth时区是东八区,Jindalee 是东十区等。

5、查询结果日期字段展示处理

6、查询条件处理

比如查询订单查询条件输入 起始日期、 结束日期,

前端JS直接把输入的日期传给后端,比如 2021-08-02~2021-08-02

2021-08-02~2021-08-02经过转换后就变成获取东八区2021-08-02 00:00:00 到2021-08-02 23:59:59的时间戳,然后再到数据库去获取数据。

注:这里其实应该传入门店对应的时区,我们当前系统时区主要集中在东八到东十一区,门店开店时间在北京时间凌晨5点~下午6点这个区间,这样处理暂时没有问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1068218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于BERT模型进行文本处理(Python)

基于BERT模型进行文本处理(Python) 所有程序都由Python使用Spyder运行。 对于BERT,在运行之前,它需要安装一些环境。 首先,打开Spyder。其次,在控制台中单独放置要安装的: pip install transformers pip install tor…

三维模型3DTile格式轻量化的纹理压缩和质量关系分析

三维模型3DTile格式轻量化的纹理压缩和质量关系分析 在三维模型的3DTile格式轻量化处理中,纹理压缩是一个重要环节。但是,纹理压缩和模型质量之间存在明显的关系需要权衡。以下是纹理压缩和模型质量关系的详细分析: 1、压缩率与纹理质量&…

Sklearn入门

Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一. Sklearn 包含了很多种机器学习的方式: Classification 分类Regression 回归Clustering 非监督分类Dimensionality reduction 数据降维Model Selection 模型选择Preprocessing 数据预处理 我们总能…

Java-包装类

这里写目录标题 包装类(Wrapper)包装类和基本数据的转换 String VS StringBuffer VS StringBuilderStringStringBufferStringBuilder 包装类(Wrapper) 针对八种基本数据类型相应的引用类型 基本数据类型包装类booleanBooleancha…

C++设计模式(1)-- 单例模式

基本概念 在一个项目中,全局范围内,某个类的实例有且仅有一个,通过这个唯一实例向其他模块提供数据的全局访问,这种模式就叫单例模式,单例模式的典型应用就是任务队列 涉及一个类多对象操作的函数有以下几个&#xff…

嵌入式基础知识-IP地址与子网划分

本篇介绍IP地址与子网划分的一些基础知识,在嵌入式开发,使用网络功能时,需要了解网络的一些基础知识。 1 IP地址 1.1 IPv4与IPv6 对比信息IPv4IPv6长度32位128位地址表示形式点分十进制冒分十六进制表示示例192.168.5.1002002:0000:0000:0…

this关键字在不同上下文中的值是如何确定的?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

最全解决docker配置kibana报错 Kibana server is not ready yet

问题复现: 在浏览器输入http://192.168.101.65:5601/ 访问kibana报错 Kibana server is not ready yet 问题报错: 首先查看kibana的日志 docker logs kibana 看到报错如下: {"type":"log","timestamp":&q…

【小笔记】复杂模型小数据可能会造成过拟合还是欠拟合?

【学而不思则罔,思而不学则殆】 10.8 问题 针对这个问题,我先问了一下文心一言 它回答了为什么会过拟合和欠拟合,但并没有回答我给的场景。 简单分析 分析模型 复杂模型就表示模型的拟合能力很强,对于数据中特征&#xff08…

如何保证 RabbitMQ 的消息可靠性?

项目开发中经常会使用消息队列来完成异步处理、应用解耦、流量控制等功能。虽然消息队列的出现解决了一些场景下的问题,但是同时也引出了一些问题,其中使用消息队列时如何保证消息的可靠性就是一个常见的问题。如果在项目中遇到需要保证消息一定被消费的…

Mybatis 拦截器(Mybatis插件原理)

Mybatis为我们提供了拦截器机制用于插件的开发,使用拦截器可以无侵入的开发Mybatis插件,Mybatis允许我们在SQL执行的过程中进行拦截,提供了以下可供拦截的接口: Executor:执行器ParameterHandler:参数处理…

深入解析PostgreSQL:命令和语法详解及使用指南

文章目录 摘要引言基本操作安装与配置连接和退出 数据库操作创建数据库删除数据库切换数据库 表操作创建表删除表插入数据查询数据更新数据删除数据 索引和约束创建索引创建约束 用户管理创建用户授权用户修改用户密码 备份和恢复备份数据库恢复数据库 高级特性结语参考文献 摘…

在win10里顺利安装了apache2.4.41和php7.4.29以及mysql8.0.33

一、安装apache和php 最近在学习网站搭建。其中有一项内容是在windows操作系统里搭建apachephp环境。几天前根据一本书的上的说明尝试了一下,在win10操作系统里安装这两个软件:apache2.4.41和php7.4.29,安装以后apche能正常启动,…

【转载】LLM-Native 产品的变与不变

1. LLM-Native:AGI 的另一种路径 《银河系漫游指南》的作者——道格拉斯亚当斯曾经对「技术」一词做出这样一种解释: 「技术」是描述某种尚未发挥作用的东西的词汇。 这是一个充满实用主义的定义,这句话可以被更直观地表述为:当…

机器学习7:pytorch的逻辑回归

一、说明 逻辑回归模型是处理分类问题的最常见机器学习模型之一。二项式逻辑回归只是逻辑回归模型的一种类型。它指的是两个变量的分类,其中概率用于确定二元结果,因此“二项式”中的“bi”。结果为真或假 — 0 或 1。 二项式逻辑回归的一个例子是预测人…

安卓玩机----解锁system分区 可读写系统分区 magisk面具模块

玩机教程----安卓机型解锁system分区 任意修改删除系统文件 system分区可读写 参考上个博文可以了解到解锁system分区的有关常识。但目前很多机型都在安卓12 13 基础上。其实最简单的方法就在于刷写一个解锁system分区的第三方补丁包。在面具更新不能解锁系统分区的前提下。…

8.2 JUC - 5.CountdownLatch

目录 一、是什么?二、demo演示三、应用之同步等待多线程准备完毕四、 应用之同步等待多个远程调用结束五、CountDownLatch 原理 一、是什么? CountdownLatch 用来进行线程同步协作,等待所有线程完成倒计时。 其中构造参数用来初始化等待计数…

C#,数值计算——数据建模Fitab的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Fitting Data to a Straight Line /// </summary> public class Fitab { private int ndata { get; set; } private double a { get; set; } …

RabbitMQ之Fanout(扇形) Exchange解读

目录 基本介绍 适用场景 springboot代码演示 演示架构 工程概述 RabbitConfig配置类&#xff1a;创建队列及交换机并进行绑定 MessageService业务类&#xff1a;发送消息及接收消息 主启动类RabbitMq01Application&#xff1a;实现ApplicationRunner接口 基本介绍 Fa…