可直接调用,实现时间和时区的相互转换
from __future__ import print_function
import pytz
import calendar
import time
import datetime
LOCAL_TIME_ZONE=pytz.timezone('Asia/Shanghai')
UTC_TIME_ZONE=pytz.utc
class TimeChange(object):
@staticmethod
def utc_dt_to_local_dt(dtUtc):
"""
将从cassandra数据库中得到的没有时区信息的ts(实际上是utc时区的)
转换为本地时区显示的时间
args:
dtUtc: utc时区的时间,datetime类型
直接查询cassandra数据库时得到的时间戳类型的时间其实都是datetime类型
returns:
dtLocal: 北京时区的事件,datetime类型
"""
tmpTs2=UTC_TIME_ZONE.localize(dtUtc)
tmpTsNew=tmpTs2.astimezone(LOCAL_TIME_ZONE)
return tmpTsNew
@staticmethod
def utc_dt_to_ts(dtUtcTime):
"""
将datetime类型的utc时间转换成时间戳
:param dtUtcTime: datetime类型
:return: 时间戳,毫秒级
"""
return int(calendar.timegm(dtUtcTime.timetuple()))*1000
@staticmethod
def utc_str_to_ts(sUtcTime):
"""
将格式为‘2018-09-12 00:00:00+0000'的utc时间转换为时间戳
:param sUtcTime: 字符串类型的utc时间
:return:时间戳
"""
dtUtcTime=datetime.datetime.strptime(sUtcTime[0:19], '%Y-%m-%d %H:%M:%S')
return TimeChange.utc_dt_to_ts(dtUtcTime)
@staticmethod
def local_dt_to_ts(dtLocalTime):
"""
将datetime类型的本地时间转换成时间戳
:param dtLocalTime: datetime类型
:return: 时间戳
"""
return int(time.mktime(dtLocalTime.timetuple()))*1000
@staticmethod
def local_str_to_ts(sLocalTime):
"""
将格式为'2018-09-12 00:00:00+0800'的本地时间转换为时间戳
:param sLocalTime: 字符串类型的本地时间
:return: 时间戳
"""
dtLocalTime=datetime.datetime.strptime(sLocalTime[0:19], '%Y-%m-%d %H:%M:%S')
return TimeChange.local_dt_to_ts(dtLocalTime)
@staticmethod
def ts_to_utc_str(iTs):
"""
将时间戳转成utc时间的字符串
:param iTs: 时间戳(单位毫秒)
:return: 字符串类型的utc时间
"""
dtTime=datetime.datetime.utcfromtimestamp(iTs / 1000)
return dtTime.strftime('%Y-%m-%d %H:%M:%S+0000')
@staticmethod
def ts_to_local_str(iTs):
"""
将时间戳转成本地时间的字符串
:param iTs: 时间戳(单位毫秒)
:return: 字符串类型的local时间
"""
dtTime=datetime.datetime.fromtimestamp(iTs/1000)
return dtTime.strftime('%Y-%m-%d %H:%M:%S+0800')
@staticmethod
def to_utc_dt(tsOne):
"""
根据数据的时间,转换为utc
:param tsOne:
:return:
"""
if __name__=="__main__":
import datetime
x=datetime.datetime.now()
print(TimeChange.utc_dt_to_ts(x))
y=TimeChange.utc_dt_to_local_dt(x)
print(type(y))
print(y)
print("all over!")