Python 时间类型及其互相转换
生活随笔
收集整理的這篇文章主要介紹了
Python 时间类型及其互相转换
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 常用的時間模塊
time是模塊提供的功能是更加接近于操作系統(tǒng)層面的。time 模塊是圍繞著 Unix Timestamp 進行的。
該模塊主要包括一個類 struct_time,另外其他幾個函數(shù)及相關常量。 需要注意的是在該模塊中的大多數(shù)函數(shù)是調用了所在平臺C library的同名函數(shù), 所以要特別注意有些函數(shù)是平臺相關的,可能會在不同的平臺有不同的效果。
import time
time_str = "2020-12-31 09:30:18"
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(t_struct.tm_year) # 年份
print(t_struct.tm_mon) # 月份
print(t_struct.tm_mday) # 日期
print(t_struct.tm_wday) # 星期
print(t_struct.tm_hour) # 小時
print(t_struct.tm_min) # 分鐘
print(t_struct.tm_sec) # 秒鐘
datetime可以理解為對 time 進行了封裝,提供了更多實用的函數(shù)。在datetime 模塊中包含了幾個類:
timedelta 主要用于計算時間跨度
tzinfo 時區(qū)相關
time 只關注時間
date只關注日期
datetime 同時有時間和日期
關系型數(shù)據(jù)庫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(datetime_obj.year) # 年份
print(datetime_obj.month) # 月份
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 = datetime.datetime.now()
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(datetime.date.today().timetuple())
print(time_begin)
# 當月第一天零時時間戳
month_begin = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
month_begin = month_begin.timestamp()
print(month_begin)
# 下月第一天零時時間戳
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)
# 當月最后一天最后一秒時間戳
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)
# 上個月最后一天最后一秒時間戳
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)
總結
以上是生活随笔為你收集整理的Python 时间类型及其互相转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS8设备重要资料还原图解教程
- 下一篇: 车道线识别之 tusimple 数据集介