系统时区处理

随着全球化应用的发展,时区问题变得复杂。本文分享了一种处理时区的方法,包括采用ISO-8601 UTC格式序列化时间,提供统一获取时间的全局函数,确保时间在服务器中以DB配置时区存储,时区转换和格式化在客户端完成,以及处理用户输入时间和夏令时的挑战。推荐使用momentjs和timezone插件,并探讨了Unix时间戳和.NET的TimeZoneInfo对象。
摘要由CSDN通过智能技术生成

随着云计算时代的到来,应用的用户可能来自世界各地,如果依然固执的认为时间都是北京时间,就有些固步自封了。

时区的问题非常复杂,不时会让人陷入迷惘之中。下面我为介绍一下我项目中的经验,希望抛砖引玉,让我们且行且思考。

 

很久很久以前,一般企业应用都是这样假定的:客户端(使用者),应用服务器,DB服务器都位于同一个时区,它们的时间被精准同步。

客户端时区 / 应用服务器时区 / DB服务器时区

TZ(+8:00)

 

这种情况下,开发者无需考虑时区的问题,在任何一层取时间,如js端的new Date(), .Net 端的DateTime.Now, DB端的getDate()之类,获取的数据都被认为是相同的。而对于日期数据的传递,一般采用固定格式的字符串,比如yyyy-MM-dd hh:mm:ss。可是时间易逝,纯真难寻。一旦考虑到多时区的问题,这一切立即变得复杂起来:

客户端时区

应用服务器时区

DB服务器时区

TZ-B

TZ-C

TZ-D

 

对于一个需要支持Global应用,它的用户可能位于不同的时区,应用服务器和DB服务器也可能跨时区部署。现在,一旦你获取时间,或者对时间进行运算,格式化,传输等等,都必须考虑时区问题了。

更为不幸的是,项目的需求可能会进一步加强复杂性:

1.       支持用户设置偏好时区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值