5

请看看您能否告诉我如何处理我的 DST 问题。

首先,我的应用程序是一个物流系统,它是针对全球用户的,所以它涉及时区问题,我将在设置用户本地预订日期时进行如下处理:

1.当用户登录应用程序时,我们可以根据登录IP获取用户的时区,但这只是一个偏移量(我不记得这个东西的术语)例如“GMT+08”(北京)或“GMT-06” (芝加哥) 。

2.在用户保存预订之前,我们需要设置预订本地日期,因为我无法直接获取用户本地日期。所以我会先获取服务器日期(在我的情况下,它是北京时间),然后根据计算本地日期到服务器日期和用户时区,例如如果用户时区是“GMT-08”,服务器日期是 2013-08-29 17:45:00。服务器时区是“GMT+08”,那么我将使用服务器 date-8-8,结果将是 2013-08-29 01:45:00。但由于我不考虑 DST,计算的本地日期将与实际日期有所不同。例如,现在在旧金山,实际的本地日期将比我使用这种方式计算的结果早一小时,

我发现 java TimeZone 已经考虑了 DST 问题,但我需要在构造 TimeZone 时提供“位置”名称(例如 US/Alaska、Pacific/Apia)。而在我的情况下,我能得到的只是偏移量。所以你能告诉我如何解决我的 DST 问题吗?

4

3 回答 3

6
于 2014-04-18T05:11:48.677 回答
3

这是头痛的常见来源

  1. 根据我的经验,通过 IP 地址进行定位并不总是可靠的,例如当人们使用公司 VPN 时。
  2. 您是正确的,基于区域的时区(“欧洲/巴黎”、“CET”)更适合正确处理 DST。

我用以下方法解决了一个类似的问题:您将精确的时区与服务器端数据库中的每个用户相关联。当用户填写预订表格时,您会显示一个 TZ 选择器,预先填写了他的默认 TZ。所以他可以仔细检查它(恕我直言,比通过 IP 猜测更安全)并且在服务器端,日期可以安全地从本地时间转换为服务器时间并返回。

于 2013-08-29T07:45:08.763 回答
1

Joda time 或许能解决你的问题:

http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTimeZone.html

于 2013-08-29T07:31:57.087 回答