我正在为日期时间库不可用的设备开发代码(注意:浮点数也不可用),所以我必须做数学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 回答
要确定是否应用了DST,您还需要知道日期和月份 . 在欧洲,这个变化是在3月的上周末/ 10月的最后一个周末 . 建议您在没有DST的情况下应用时区偏移,进行计算以获得小时,星期几,日和月,然后如果您使用DST,则可能需要调整任何或所有这些值(取决于原始值小时,可能只是需要调整的小时) .
通过首先执行时区偏移,您可以在没有DST的情况下获得当地小时/天的周/日值,然后DST调整是微不足道的 .