【问题标题】:How to calculate day of the week from timestamp? (DST)如何根据时间戳计算星期几? (夏令时)
【发布时间】:2012-02-03 12:12:50
【问题描述】:

我正在为日期时间库不可用的设备开发代码(注意:浮点数也不可用),所以我必须做数学 myslef。

我的时间戳是从 2000 年 1 月 1 日开始的秒数(UTC 时间)。 在设备配置中我有:

  • 当前时区与 UTC 相差小时数 +/-
  • dst 作为要添加的小时数

我需要知道:

  • 当前星期几
  • 当前时间

计算当前时间非常简单:

timestamp % 86400 # seconds from midnight

计算星期几(1-星期一,7-星期日):

dayofweek = (timestamp - 86400) % (86400*7) / 86400
if dayofweek = 0:
    dayofweek = 7

注释:

  • 86400 = 一天中的秒数

但在计算之前,我应该: 1.添加时区小时 2.增加夏令时时间

问题是如何计算是否应添加 DST 小时(仅适用于欧洲夏令时)?我需要有效地做到这一点,因为我的计算能力非常有限,我需要尽快做到这一点:-)

【问题讨论】:

  • @selbie 闰年与星期几有什么关系?在闰年,我们将 1 天添加到一个月,而不是一天添加到一周。我不按年划分,我按天/周划分。
  • 我的错。闰年对于计算年/月/日确实很重要。但是您对于星期几是正确的,这无关紧要。

标签: math language-agnostic timestamp


【解决方案1】:

要确定是否应用 DST,您还需要知道日期和月份。在欧洲,更改时间为 3 月的最后一个周末/10 月的最后一个周末。建议您在没有 DST 的情况下应用时区偏移量,进行计算以获取小时、星期几、日期和月份,然后如果您在 DST 中,您可能需要调整任何或所有这些值(取决于小时,可能只是需要调整的小时)。

通过首先进行时区偏移,您可以在没有 DST 的情况下获得正确的本地小时/星期几/天值,然后 DST 调整是微不足道的。

【讨论】:

    猜你喜欢
    • 2012-12-18
    • 2011-10-22
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2011-08-01
    • 2011-01-29
    相关资源
    最近更新 更多