如何从时间戳计算星期几? (DST)

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

我的时间戳是2000年1月1日(UTC)的秒数 . 在配置设备我有:

  • 当前时区为小时数 - 来自UTC

  • dst作为要添加的小时数

我需要知道:

  • 当前星期几

  • 当前时间

计算当前小时非常简单:

timestamp % 86400 # seconds from midnight

计算星期几(1-monday,7-sunday):

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

笔记:

  • 86400 =一天内的秒数

但在计算之前我应该:1 . 添加时区小时2.添加DST小时

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

回答(1)

3 years ago

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

通过首先执行时区偏移,您可以在没有DST的情况下获得当地小时/天的周/日值,然后DST调整是微不足道的 .