Python时间戳和时间类型及其互相转换
1 常⽤的时间模块
time是模块提供的功能是更加接近于操作系统层⾯的。time 模块是围绕着 Unix Timestamp 进⾏的。
该模块主要包括⼀个类 struct_time,另外其他⼏个函数及相关常量。需要注意的是在该模块中的⼤多数函数是调⽤了所在平台C library的同名函数,所以要特别注意有些函数是平台相关的,可能会在不同的平台有不同的效果。
import time
time_str = "2020-12-31 09:30:18"
unix时间戳转换日期格式t_struct = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")  # ⽣成time_str对应的struct_time对象
t_str = time.strftime("%Y-%m-%d %H:%M:%S", t_struct)  # ⽣成t_struct对应格式的字符串时间
t_stamp = time.mktime(t_struct)  # ⽣成t_struct对应的时间戳
print(t_struct)
print(t_str)
print(t_stamp)
# struct_time有以下常⽤属性
print(_year)  # 年份
print(_mon)  # ⽉份
print(_mday)  # ⽇期
print(_wday)  # 星期
print(_hour)  # ⼩时
print(_min)  # 分钟
print(_sec)  # 秒钟
datetime可以理解为对 time 进⾏了封装,提供了更多实⽤的函数。在datetime 模块中包含了⼏个类:
timedelta 主要⽤于计算时间跨度
tzinfo 时区相关
time 只关注时间
date只关注⽇期
datetime 同时有时间和⽇期
关系型数据库DateTime类型在python对应的类型为datetime.datetime类型
import datetime
time_stamp = 1609378218
time_str = "2020-12-31 09:30:18"
dd_struct = datetime.datetime.strptime(time_str,"%Y-%m-%d %H:%M:%S")  # 转化为struct_time对象
dd_obj = datetime.datetime.fromtimestamp(time_stamp)  # 将时间戳转换为datetime
dd_struct1 = dd_obj.timetuple()  # 将datetime对象转化为struct_time对象
dd_str = dd_obj.strftime("%Y-%m-%d %H:%M:%S")  # 将datetime对象转化为str格式
dd_stamp = dd_obj.timestamp()  # 将datetime对象转为时间戳
print(dd_struct)
print(dd_obj)
print(dd_struct1)
print(dd_str)
print(dd_stamp)
# 所有datetime下的时间类型都有timetuple()⽅法可以将其转化为struct_time对象,进⽽可以⽤time模块将其转换为任意类型
date_obj = datetime.date(year=2020, month=12, day=31)
time_obj = datetime.time(hour=9, minute=30, second=18)
datetime_obj = datetime.datetime(year=2020, month=12, day=31, hour=9, minute=30, second=18)
# datetime对象有以下常⽤属性
print(ar)  # 年份
print(h) # ⽉份
print(datetime_obj.day)  # ⽇期
print(datetime_obj.hour)  # ⼩时
print(datetime_obj.minute)# 分钟
print(datetime_obj.second)# 秒种
2. 常⽤时间类型之间的转换
常⽤的时间类型有时间戳(int/float),struct_time对象,datetime.date对象,datetime.datetime对象
2.1 Str格式和时间戳
# 使⽤time 由 str 转换为时间戳
timeStr = '2020-12-31 09:30:18'
timeArray = time.strptime(timeStr, "%Y-%m-%d %H:%M:%S")
timeStamp = time.mktime(timeArray)
print(timeStamp)  # 1609378218.0
# 使⽤datetime 由 str 转换为时间戳
dateArray = datetime.datetime.strptime(timeStr, "%Y-%m-%d %H:%M:%S")
timeStamp = dateArray.timestamp()
print(timeStamp)  # 1609378218.0
# 使⽤time 由时间戳转换为 str
timeStamp = 1609378218
timeArray = time.localtime(timeStamp)
timeStr = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
print(timeStr)  # 2020-12-31 09:30:18
# 使⽤datetime 由时间戳转换为 str
dateArray = datetime.datetime.fromtimestamp(timeStamp)
timeStr = dateArray.strftime("%Y-%m-%d %H:%M:%S")
print(timeStr)  # 2020-12-31 09:30:18
2.2 datetime对象和时间戳
# 由时间戳转换为 datetime对象 (转换为 str格式)
timeStamp = 1609378218
dateArray = datetime.datetime.fromtimestamp(timeStamp)
timeStr = dateArray.strftime("%Y-%m-%d %H:%M:%S")
print(timeStr)  # 2020-12-31 09:30:18
# 使⽤datetime,指定utc时间,相差8⼩时
timeStamp = 1609378218
dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
timeStr = dateArray.strftime("%Y-%m-%d %H:%M:%S")
print(timeStr)  # 2020-12-31 09:30:18
# 由 datetime对象转换为时间戳
dateArray = datetime.datetime(year=2020, month=12, day=31, hour=9, minute=30, second=18) timeStamp = dateArray.timestamp()
print(timeStamp)  # 1609378218.0
2.3 str类型转换为其他格式的str
# 原始字符类型的时间
ts = '2020-12-31 09:30:18'
# 转为struct_time
timeArray = time.strptime(ts, "%Y-%m-%d %H:%M:%S")
# 转为其它显⽰格式
timeStr = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)
print(timeStr)
3. ⽣成特定时间
# time获取当前时间戳
now = int(time.time())
print(now)
# 获取当前时间对象
timeArray = time.localtime(now)
print(timeArray)
# 获取当前时间str
timeStr = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
print(timeStr)
# datetime获取当前时间
now = w()
print(now)
# 获取当前时间str
timeStr = now.strftime("%Y-%m-%d %H:%M:%S")
print(timeStr)
# 获取当前时间戳
timeStamp = now.timestamp()
timeStamp1 = time.mktime(now.timetuple())
print(timeStamp)
print(timeStamp1)
# 获取当天零时时间戳
time_begin = time.mktime(day().timetuple())
print(time_begin)
# 当⽉第⼀天零时时间戳
month_begin = datetime.ar, h, 1, 0, 0, 0)
month_begin = month_begin.timestamp()
print(month_begin)
# 下⽉第⼀天零时时间戳
month = h
month = 0 if month == 12 else month
future_month_first = datetime.ar, month + 1, 1, 0, 0, 0)
future_month_first = future_month_first.timestamp()
print(future_month_first)
# 当⽉最后⼀天最后⼀秒时间戳
month = h
month = 0 if month == 12 else month
future_month_first = datetime.ar, month + 1, 1, 23, 59, 59)
month_end = future_month_first - datetime.timedelta(days=1)
month_end = month_end.timestamp()
print(month_end)
# 上个⽉最后⼀天最后⼀秒时间戳
this_month_first = datetime.ar, h, 1, 23, 59, 59) last_month_last = this_month_first - datetime.timedelta(days=1)
last_month_last = last_month_last.timestamp()
print(last_month_last)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。