假设我有一个特定的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?
以便它返回我想要的内容?
答案 0 :(得分:2)
好的,为了澄清这一点,你实际上有两条信息:
您想要查看在给定的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 ...如果我理解正确的话。