时间戳定义
时间戳是指格林威治时间自1970年1月1日(00:00:00 GMT)至当前时间的总秒数。它也被称为Unix时间戳(Unix Timestamp)。通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。
根据精度的不同,分为 10 位(秒级),13 位(毫秒级),16 位(微妙级)和 19 位(纳秒级)。最常用的为13位和10位,python里一般默认为10位。
获取现在的Unix时间戳
import time
print(time.time())
# 1647736855.316063(单位为秒)
Unix时间戳 → 普通时间
import time
local_time=time.gmtime(1647736855.316063)
# time.struct_time(tm_year=2022, tm_mon=3, tm_mday=20, tm_hour=0, tm_min=40, tm_sec=55, tm_wday=6, tm_yday=79, tm_isdst=0)
print(time.strftime("%Y-%m-%d %H:%M:%S", local_time))
# 2022-03-20 00:40:55
13位毫秒级时间时:
import time
def timeStamp(timeNum):
timeStamp = float(timeNum/1000)
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
print(otherStyleTime)
timeStamp(1647736855100)
# 2022-03-20 08:40:55
普通时间 → Unix时间戳
import time
print(int(time.mktime(time.strptime('2022-03-20 00:40:55', '%Y-%m-%d %H:%M:%S'))))
# 1647708055
13位毫秒级时间时:
import time
from datetime import datetime
timestr = '2022-03-20 8:59:18.123'
datetime_obj = datetime.strptime(timestr, "%Y-%m-%d %H:%M:%S.%f")
obj_stamp = int(time.mktime(datetime_obj.timetuple()) * 1000.0 + datetime_obj.microsecond / 1000.0)
print(obj_stamp)
# 1647737958123
时区转换
pytz模块常用于时区的转换,常常配合datetime一起使用。我们知道datetime除了data方法生成的时间是没有时区概念,其他如time、datetime等都是有时区概念。
获得某个国家的时区名列表:
pytz.country_timezones(‘国家代码’):国家代码参见此处
import pytz
print(pytz.country_timezones('CN'))
# ['Asia/Shanghai', 'Asia/Urumqi']
10位秒级时:
import pytz
ts = 1566395745
tz = pytz.timezone('America/New_York')
dt = pytz.datetime.datetime.fromtimestamp(ts, tz)
dt.strftime('%Y-%m-%d %H:%M:%S')
13位毫秒级时:
import pytz
timeNum = 1118846980400
ts = float(timeNum)/1000
tz = pytz.timezone('America/Los_Angeles')
dt = pytz.datetime.datetime.fromtimestamp(ts, tz)
print(dt.strftime('%Y-%m-%d %H:%M:%S.%f'))
格式化说明
%Y 年
%m 月
%d 日
%H 时
%M 分
%S 秒
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身