1

所以我有本地时间字符串以“hh:mm:ss”的格式进入服务器。有没有办法确定客户端的时区?

到目前为止,我可以使用 DateTimeFormatter 将字符串转换为 joda DateTime 并获取与 timeZone UTC 相关的偏移量,但这可能不准确,因为在客户端采用的时间戳和计算发生的时间之间会有延迟在服务器上(例如,如果客户端发送的时间是 11:59:59 +01:00 在服务器上延迟 2 秒到达,则计算将大致如下形式:11:59:59 - 11:00:01 = 0 小时偏移,这是错误的)。

除了强制客户端发送 timeZone 而不是 localTime 之外,还有什么建议吗?

4

2 回答 2

2

在给定当地时间的情况下,您无法计算时区可以计算与 UTC 的偏移量,但这与时区不同。

如果您想要用户的时区,那么最好的办法是使用 IP 地址,因为这更有可能为您提供位置。

于 2013-09-12T08:57:00.723 回答
0

如果误差幅度不大于几分钟,那么您可以从收到的本地时间中减去 UTC 时间,然后四舍五入到最接近的小时以得到偏移量。您可能可以使用 Minutes.minutesBetween,然后除以 60.0 并四舍五入。如果您关心 :30 和 :45 时区,那么您可以除以 15.0、四舍五入并乘以 15 以获得以分钟为单位的偏移量。

但是,一旦有了偏移量,就可能没有使用它的唯一时区。与该偏移量相对应的时区列表取决于完整日期(因为 DST)。所以如果你真的想要时区,最好让客户端发送它。

使用 joda 时间查看两个日期之间的秒数差异?以及如何通过 UTC 偏移量确定时区?

于 2013-09-11T17:49:14.103 回答