问题描述
在用Python访问Marathon接口的时候,返回的字段中时间字符串与服务器时间相差8小时。主要是java进程启动的时候没有指定相关参数,所以java进程的时间是UTC时区的。如返回的时间字符串格式为:2020-05-22T03:09:11.908Z
.接下来使用Python自带的库进行转换时区。
解决方案
使用datetime
库进行处理
from datetime import datetime, tiimezone, timedelta
# 将时间字符串转化为datetime对象
origin_time = datetime.strptime("2020-05-22T03:09:11.908Z", "%Y-%m-%dT%H:%M:%S.%fZ")
origin_time = origin_time.replace(tzinfo=timezone.utc) # 强制设置时区为UTC+0:00
utc8 = timezone(timedelta(hours=8)) ## 通过时间offset的方式设定时区
local_time = origin_time.astimezone(utc8) # 转换时区
print(localtime)
使用pytz
import datetime
import pytz
local_tz = pytz.timezone("Asia/Shanghai")
origin_time = datetime.strptime("2020-05-22T03:09:11.908Z", "%Y-%m-%dT%H:%M:%S.%fZ")
origin_time = origin_time.replace(tzinfo=timezone.utc) # 强制设置时区为UTC+0:00
local_tz = origin_time.astimezone(local_tz) # 转换时区
print(local_tz)
总结
pytz
的方式使时区的指定变的更加优雅,因为有很多时候并不知道具体的偏移时长。可以调用pytz.timezone('cn')
获取中国的所有可用的时区。时区转换的整个过程是先调用replace
方法强制设置时区为UTC+0:00,然后调用astimezone
方法,参数传入指定的时区。