【问题标题】:Joda - Infer timeZone by only having dateTime in format "hh:mm:ss"Joda - 通过仅具有格式“hh:mm:ss”的日期时间来推断时区
【发布时间】:2013-09-15 18:41:42
【问题描述】:

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

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

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

【问题讨论】:

  • 做减法时不要只使用小时数。 11:59:59-11:00:01 应该给你一个 3598 秒的偏移量,而不是 0 小时的偏移量。然后,当您将 3598 秒转换为小时时,将其四舍五入到最接近的小时。只要没有 30 分钟的沟通延迟,并且您还有其他问题,这将起作用。

标签: java jodatime


【解决方案1】:

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

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

【讨论】:

  • 在这种情况下,您不需要所有时区的详尽列表吗?怎么样?你能提供更多细节吗?
  • 不仅如此,您还需要一份详尽的所有地点列表,然后将它们映射回时区。不是最简单的程序,但如果您想要准确的时区信息,那么这是获得它的最简单方法。谷歌搜索“来自 IP 地址的地理位置”将为您提供任意数量的服务,您可以使用这些服务或在其上建模。
【解决方案2】:

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

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

另见difference in seconds between two dates using joda time?How can I determine a timezone by the UTC offset?

【讨论】:

    猜你喜欢
    • 2013-04-04
    • 2014-07-07
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多