标签:毫秒级 pre lower 本地 timezone pass local strftime 方法
在用Python处理datetime和timestamp的转换时发现在时区方面,Python的处理是个大坑。
因为Python的time是默认localtime输入来处理的,导致脚本在本地运行和在服务器运行会得到不一样的结果。一不注意就会中招。
R中也会碰到时区的问题,但是R的方法提供了tz选项来指定日期的时区,简化了问题。而Python 中的time.mktime无法对时区进行指定,带来了很多麻烦。查了很久,发现有一个time.timezone的属性,可以根据运行脚本的机器的时间,来灵活处理时区问题。
以下是datetime与timestamp转换的方法, 输入和输出都以GMT0为准。
import time
def timestamp_datetime(ts,type=‘ms‘):
"""
输入时间戳,将时间戳转换为GMT0日期时间输出
:param ts: int整型或int字符串,默认毫秒时间
:param type: 时间类型,输入的数据为ms或s。默认ms
:return: GMT0的time_struct类型(但time_struct其实不含tz信息)
"""
ts = int(ts)
if type.lower() == ‘ms‘:
ts = ts/1000
elif type.lower() == ‘s‘:
pass
else:
print(‘错误!时间戳请选择s或ms‘)
return
str_format = ‘%Y-%m-%d %H:%M:%S‘
dt0 = time.strftime(str_format, time.gmtime(ts)) #GMT0的日期
return dt0
def datetime_timestamp(dt0, type=‘ms‘):
"""
输入GMT0时间的日期(或日期字符串),输出int型时间戳。默认毫秒级
:param dt0: GMT0的时间
:param type: 输出的时间戳类型,ms级还是s级
:return: int型时间戳
"""
if isinstance(dt0, str):
ts = time.mktime(time.strptime(dt0, ‘%Y-%m-%d %H:%M:%S‘))
else:
ts = time.mktime(dt0)
delta = time.timezone # mktime默认时间是本地时间,需用 ts+delta 调整时区
if type.lower() == ‘ms‘:
ts0 = int(ts) * 1000 - delta * 1000
elif type.lower() == ‘s‘:
ts0 = int(ts) - delta
else:
print(‘错误!时间戳请选择s或ms‘)
return
return ts0
Python datetime与timestamp之间的转换
标签:毫秒级 pre lower 本地 timezone pass local strftime 方法
原文地址:http://www.cnblogs.com/oDoraemon/p/6897950.html