Python 时间戳转换的时区问题

背景

本文基于python 3.6 使用datetime模块来解决问题
这个话题起源于客户的一个需求 发过来的时间戳是以1970年1月1日0点为计时起点时间的
所以本文探究了一下时区对转换的影响

# -*- coding: utf-8 -*-

from datetime import datetime, timedelta, timezone


def date_time_vision_test1( stamp):
    msgtime = int(stamp)
    logstime = datetime.utcfromtimestamp(msgtime)
    logstime = logstime.strftime("%Y-%m-%d %H:%M:%S")
    return logstime

def date_time_vision_test2( stamp):
    msgtime = int(stamp)
    logstime = datetime.fromtimestamp(msgtime, tz=None)
    logstime = logstime.strftime("%Y-%m-%d %H:%M:%S")
    return logstime
def date_time_vision_test3( stamp):
    msgtime = int(stamp)
    logstime = datetime.fromtimestamp(msgtime)
    logstime = logstime.strftime("%Y-%m-%d %H:%M:%S")
    return logstime
def date_time_vision_test4( stamp):
    msgtime = int(stamp)
    logstime = datetime.utcfromtimestamp(msgtime).replace(tzinfo = timezone.utc).astimezone(tz = None )
    logstime = logstime.strftime("%Y-%m-%d %H:%M:%S")
    return logstime

ts = datetime.now().timestamp()

print(ts)
print( date_time_vision_test1( ts ))
print( date_time_vision_test2( ts ))
print( date_time_vision_test3( ts ))
print( date_time_vision_test4( ts ))

运行结果

1632730591.840916
2021-09-27 08:16:31
2021-09-27 16:16:31
2021-09-27 16:16:31
2021-09-27 16:16:31

总结

通过以上测试
我们可以看到datetime的接口使用utc获取的就是0时区
需要消除时区的影响


版权声明:本文为wnw_jackie原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。