业务开发中的时区问题

【关于作者】

关于作者,目前在蚂蚁金服搬砖任职,在支付宝营销投放领域工作了多年,目前在专注于内存数据库相关的应用学习,如果你有任何技术交流或大厂内推及面试咨询,都可以从我的个人博客(https://0522-isniceday.top/)联系我

时区划分

  • UTC:Coordinated Universal Time- 世界协调时间,零时区
  • CST:4个不同的时区时间
    1. Central Standard Time (USA) UT-6:00
    2. Central Standard Time (Australia) UT+9:30
    3. China Standard Time UT+8:00
    4. Cuba Standard Time UT-4:00
  • GMT:「格林威治标准时间」(Greenwich Mean Time,简称G.M.T.)
  • PST:太平洋标准时间

关系:

UTC=GMT

CST=UTC/GMT +8=PST+8+8

CST=CET+7

UTC=PST+8

目前阿里的服务器统一采取的UTC时区,不带有任何地区标识

地时

时间由两个维度进行标识:时间值+时区

地球处于某一自转状态时对应的时间为地时,地时由时间值和时区组成,即(时间值,时区)二维坐标。地球某一自转状态时,不同时区的时间值不相同,但地时为同一个。地时有多种表达方式,每一个时区都对应一种表达方式,但都是等价的。
例如,(8:00,UTC+01),(9:00,UTC+02),(10:00,UTC+03),(11:00,UTC+04)
这4个地时为等价地时,同一地时在不同时区的转换称为地时的等价转换或恒定转换,将地时转化为相同时区称为地时的共区化。地时只能在相同时区下才能比较,这称为地时的同区比较

因此,对于时间的判断或传递。需要传入时区以及时间值,创建时间也需要包含时区信息,如果未包含,则时间信息无效

业务可能涉及的时区分类:

服务器的系统时间

它影响应用中new Date的值和date toString展示的时区标志,注意Date自身不包含时区标志,它本质上只是个时间戳,toString时仅仅取服务器系统时区作为date的时区标志

sessionTimeZone

它为应用与db会话时所定的时区,db根据这个时区来判断所接收到date的时区。

<bean id="db_config_shareipayment" class="com.alipay.zdatasource.LocalTxDataSourceDO">
        <property name="jndiName" value="ShareipaymentDataSource"/>
        <property name="connectionURL" value="jdbc:mysql://ipaymydev.devdb.alipay.net:3306/share_ipayment"/>
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="connectionProperties">
            <map>
                <entry key="sessionTimeZone" value="PST"/>
            </map>
        </property>
    </bean>

数据库的系统时区

sql生成的时间的出生时区。如sql中使用set gmt_modified=sysdate()

时区问题解决

  1. 采取时间戳,因为不同时区的时间戳值一致,缺点主要是时间戳只能用到204X年

  2. 确定时区,恒定转换

    在进行时间比较,都需要确定两者的时区一致,或者进行时间的返回渲染页面,也需要确保返回的时间和端的时区一致,以及时间的传递需要保证时间值+时区都穿

洛杉矶时间

洛杉矶时间会涉及冬令时和夏令时的变动,需要注意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈哈张大侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值