Python 时间类型及其互相转换
1 常用的時(shí)間模塊
time是模塊提供的功能是更加接近于操作系統(tǒng)層面的。time 模塊是圍繞著 Unix Timestamp 進(jìn)行的。
該模塊主要包括一個(gè)類 struct_time,另外其他幾個(gè)函數(shù)及相關(guān)常量。 需要注意的是在該模塊中的大多數(shù)函數(shù)是調(diào)用了所在平臺(tái)C library的同名函數(shù), 所以要特別注意有些函數(shù)是平臺(tái)相關(guān)的,可能會(huì)在不同的平臺(tái)有不同的效果。
import time
time_str = "2020-12-31 09:30:18"
t_struct = time.strptime(time_str, "%Y-%m-%d %H:%M:%S") # 生成time_str對(duì)應(yīng)的struct_time對(duì)象
t_str = time.strftime("%Y-%m-%d %H:%M:%S", t_struct) # 生成t_struct對(duì)應(yīng)格式的字符串時(shí)間
t_stamp = time.mktime(t_struct) # 生成t_struct對(duì)應(yīng)的時(shí)間戳
print(t_struct)
print(t_str)
print(t_stamp)
# struct_time有以下常用屬性
print(t_struct.tm_year) # 年份
print(t_struct.tm_mon) # 月份
print(t_struct.tm_mday) # 日期
print(t_struct.tm_wday) # 星期
print(t_struct.tm_hour) # 小時(shí)
print(t_struct.tm_min) # 分鐘
print(t_struct.tm_sec) # 秒鐘
datetime可以理解為對(duì) time 進(jìn)行了封裝,提供了更多實(shí)用的函數(shù)。在datetime 模塊中包含了幾個(gè)類:
timedelta 主要用于計(jì)算時(shí)間跨度
tzinfo 時(shí)區(qū)相關(guān)
time 只關(guān)注時(shí)間
date只關(guān)注日期
datetime 同時(shí)有時(shí)間和日期
關(guān)系型數(shù)據(jù)庫(kù)DateTime類型在python對(duì)應(yīng)的類型為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") # 轉(zhuǎn)化為struct_time對(duì)象
dd_obj = datetime.datetime.fromtimestamp(time_stamp) # 將時(shí)間戳轉(zhuǎn)換為datetime
dd_struct1 = dd_obj.timetuple() # 將datetime對(duì)象轉(zhuǎn)化為struct_time對(duì)象
dd_str = dd_obj.strftime("%Y-%m-%d %H:%M:%S") # 將datetime對(duì)象轉(zhuǎn)化為str格式
dd_stamp = dd_obj.timestamp() # 將datetime對(duì)象轉(zhuǎn)為時(shí)間戳
print(dd_struct)
print(dd_obj)
print(dd_struct1)
print(dd_str)
print(dd_stamp)
# 所有datetime下的時(shí)間類型都有timetuple()方法可以將其轉(zhuǎn)化為struct_time對(duì)象,進(jìn)而可以用time模塊將其轉(zhuǎn)換為任意類型
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對(duì)象有以下常用屬性
print(datetime_obj.year) # 年份
print(datetime_obj.month) # 月份
print(datetime_obj.day) # 日期
print(datetime_obj.hour) # 小時(shí)
print(datetime_obj.minute)# 分鐘
print(datetime_obj.second)# 秒種
2. 常用時(shí)間類型之間的轉(zhuǎn)換
常用的時(shí)間類型有 時(shí)間戳(int/float),struct_time對(duì)象,datetime.date對(duì)象,datetime.datetime對(duì)象
2.1 Str格式 和 時(shí)間戳
# 使用time 由 str 轉(zhuǎn)換為 時(shí)間戳
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 轉(zhuǎn)換為 時(shí)間戳
dateArray = datetime.datetime.strptime(timeStr, "%Y-%m-%d %H:%M:%S")
timeStamp = dateArray.timestamp()
print(timeStamp) # 1609378218.0
# 使用time 由 時(shí)間戳 轉(zhuǎn)換為 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 由 時(shí)間戳 轉(zhuǎn)換為 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對(duì)象和時(shí)間戳
# 由 時(shí)間戳 轉(zhuǎn)換為 datetime對(duì)象 (轉(zhuǎn)換為 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時(shí)間,相差8小時(shí)
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對(duì)象 轉(zhuǎn)換為 時(shí)間戳
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類型轉(zhuǎn)換為其他格式的str
# 原始字符類型的時(shí)間
ts = '2020-12-31 09:30:18'
# 轉(zhuǎn)為struct_time
timeArray = time.strptime(ts, "%Y-%m-%d %H:%M:%S")
# 轉(zhuǎn)為其它顯示格式
timeStr = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)
print(timeStr)
3. 生成特定時(shí)間
# time獲取當(dāng)前時(shí)間戳
now = int(time.time())
print(now)
# 獲取當(dāng)前時(shí)間對(duì)象
timeArray = time.localtime(now)
print(timeArray)
# 獲取當(dāng)前時(shí)間str
timeStr = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
print(timeStr)
# datetime獲取當(dāng)前時(shí)間
now = datetime.datetime.now()
print(now)
# 獲取當(dāng)前時(shí)間str
timeStr = now.strftime("%Y-%m-%d %H:%M:%S")
print(timeStr)
# 獲取當(dāng)前時(shí)間戳
timeStamp = now.timestamp()
timeStamp1 = time.mktime(now.timetuple())
print(timeStamp)
print(timeStamp1)
# 獲取當(dāng)天零時(shí)時(shí)間戳
time_begin = time.mktime(datetime.date.today().timetuple())
print(time_begin)
# 當(dāng)月第一天零時(shí)時(shí)間戳
month_begin = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
month_begin = month_begin.timestamp()
print(month_begin)
# 下月第一天零時(shí)時(shí)間戳
month = now.month
month = 0 if month == 12 else month
future_mouth_first = datetime.datetime(now.year, month + 1, 1, 0, 0, 0)
future_mouth_first = future_mouth_first.timestamp()
print(future_mouth_first)
# 當(dāng)月最后一天最后一秒時(shí)間戳
month = now.month
month = 0 if month == 12 else month
future_mouth_first = datetime.datetime(now.year, month + 1, 1, 23, 59, 59)
month_end = future_mouth_first - datetime.timedelta(days=1)
month_end = month_end.timestamp()
print(month_end)
# 上個(gè)月最后一天最后一秒時(shí)間戳
this_month_first = datetime.datetime(now.year, now.month, 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)
總結(jié)
以上是生活随笔為你收集整理的Python 时间类型及其互相转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS8设备重要资料还原图解教程
- 下一篇: 车道线识别之 tusimple 数据集介