鉴于UTC时间的日期,我如何知道它是否在世界其他地方的当天?

时间:2010-09-13 16:37:33

标签: language-agnostic time timezone

假设我有一个特定的UTC 时间 T。我想要一个方法,如果地球上其他地方至少有一个地点现在与T具有相同的本地日期,则返回true。

def still_same_date?(t)
  # true
  #   if it is the same day at some other place on Earth
  # false
  #   otherwise
end

例如,假设T今天是当地时间上午12:01。那显然是真的,因为在我以东的任何地方也会有今天的日期(那些地点的当天晚些时候)。

但如果T昨天是我当地时间下午4:00,那么地球上还有另一个地方仍然没有那个日期显然已经确定了。

如果T是我当地时间2000年1月1日下午6:58,那么地球上另一个地方的日期相同,显然是错误的。

如何写still_same_date?以便它返回我想要的内容?

2 个答案:

答案 0 :(得分:2)

好的,为了澄清这一点,你实际上有两条信息:

  • UTC即时
  • 日期

您想要查看在给定的UTC时刻,是否存在任何时区,以使日期为给定日期。请注意,你在问题中谈论“今天”并没有给出日期的独特价值(由于不同的时区 - 我的“今天”可能与你的不同),这就是为什么我明确表达了它的原因在具有两个参数的函数方面。

基本上,你需要迭代。伪代码:

for each time zone tz
  localTime = tz.GetLocalTime(utc)
  if (localTime.GetDate() == targetDate)
    return true

return false

现在,你可以通过找到最大和最小的时区偏移量来优化这一点,这会给你一个“真实”的结果,并应用边界。我不记得有史以来最大和最小的偏移是什么,但我会安全猜测如果你需要超过+15或小于-15,你可以立即返回false。

你也可以减少你测试的时区,只使用历史上某个时刻已知的极端

除非这对性能至关重要,否则我会编写简单的代码并留下TODO进行优化:)

答案 1 :(得分:2)

基本上,如果DateTime.UtcNow距您的UTC日期+/- 12小时,您应该返回true ...如果我理解正确的话。