场景:
国外新闻,很多需要做这种转换。新闻源是时间字符串,产品是全球化的,需要转成时间戳
代码:
def make_timestamp(time_str, time_format='%Y-%m-%d'):
"""
时间字符串-->毫秒时间戳
注意:time_raw 如果是0时区的时间,则需对结果时间戳 +28800; 如果是+8时区时间,则无需额外操作。
:param time_str: 时间字符串
:param time_format: 时间格式,常用:%Y-%m-%d %H:%M:%S 或 %Y-%m-%dT%H:%M:%SZ
:return: 毫秒时间戳
"""
# 判断是否是夏令时
is_dst = time.daylight and time.localtime().tm_isdst
# 计算差值
offset = time.altzone if is_dst else time.timezone
# 计算时间戳
return (int(datetime.strptime(time_str, time_format).timestamp()) - offset - 28800) * 1000
坑:
Windows系统下,altzone与timezone返回值 相差1小时。最好用timezone,小概率夏令时,才会用altzone
参考:
1、stackoverflow.com/questions/1…
2、www.cnblogs.com/lambs/p/855…
3、夏时制(美国及加拿大英语:daylight time),又称夏令时、日光节约时间(美国及加拿大称为daylight saving time,简称DST;英国与其他地区称为Summer Time),是一种在夏季月份牺牲正常的日出时间,而将时间调快的做法。通常使用夏时制的地区,会在接近春季开始的时候,将时间调快一小时,并在秋季调回正常时间[1]。实际上,夏时制会造成在春季转换当日的睡眠时间减少一小时,而在秋季转换当日则会多出一小时的睡眠时间[2][3]。