首頁 > 科技

一篇文章總結一下Python庫中關於時間的常見操作

2021-06-24 10:43:14

來源:Python爬蟲與資料探勘

作者:Python進階者

前言

本次來總結一下關於Python時間的相關操作,有一個有趣的問題。

如果你的業務用不到時間相關的操作,你的業務基本上會一直用不到。

但是如果你的業務一旦用到了時間操作,你就會發現,淦,到處都是時間操作。。。

所以思來想去,還是總結一下吧,本次會採用類型註解方式。

time包

import time

時間戳

從1970年1月1日00:00:00標準時區誕生到現在時間一共過了多少秒。

程式碼

timestamp = time.time() # type:floatprint(timestamp, type(timestamp))

執行結果

睡眠

有時候可能我們可能需要模仿一些IO請求,假裝讓程式休眠一下,所以需要用到time的sleep函數。

程式碼

# 睡眠 1秒time.sleep(1)

本地時區

本地時區需要用到time的localtime方法。

程式碼

t = time.localtime() # type:time.struct_timeprint(t, type(t))

執行結果

localtime還能接收一個時間戳參數。

程式碼

# 將時間戳轉換成 struct_time 物件t = time.localtime(1606395685.1878598) # type:time.struct_timeprint(t, type(t))

執行結果

簡單的時間格式

程式碼

t = time.ctime() # type:strprint(t, type(t))

執行結果

雖然這個能把時間展示出來,但是這個格式實在是不是太好看。

同理,time.ctime()也是可以接收一個時間戳的。

程式碼

t = time.ctime(1606395685.1878598) # type:strprint(t, type(t))

執行結果

時間格式化

日期格式 -> 字元串(strftime)

程式碼

t = time.localtime() # type:time.struct_timet_str = time.strftime("%Y-%m-%d", t) # type:strprint(t_str, type(t_str))

執行結果

字元串日期 -> 日期(strptime)

程式碼

t_str = "2020-11-02"t_time = time.strptime(t_str, "%Y-%m-%d") # type:time.struct_timeprint(t_time, type(t_time))

執行結果

格式化補充

主要有如下格式

具體詳見:

https://www.runoob.com/python/python-date-time.html

datetime包

注:datetime和time是兩個不同的類型,不能混用。

from datetime import datetime

datetime.today()

程式碼

t = datetime.today() # type:datetimeprint(t, type(t))print(t.year) # 年份print(t.month) # 月份

執行結果

datetime.now()

和datetime.today()基本一樣,返回的是本地時間

程式碼

t = datetime.now() # type:datetimeprint(t,type(t))

執行結果

datetime.utcnow()

utcnow返回的是標準(UTC)時間,上述倆返回的都是本地時間,我們是東八區

程式碼

t = datetime.now()print("東八區時間:", t)t = datetime.utcnow() # type:datetimeprint("UTC時間:", t)

執行結果

時間戳轉datetime

有時候,我們拿到的,就是時間戳,那就只能轉了。

程式碼

# 時間戳timestamp = time.time()print(f"timestamp:{timestamp},type:{type(timestamp)}")# 時間戳轉datetimet = datetime.fromtimestamp(timestamp)print(f"t:{t},type:{type(t)}")

執行結果

datetime -> 字元串日期(strftime)

程式碼

from datetime import datetimet = datetime.now()str_datetime = t.strftime("%Y-%m-%d %H:%M:%S")print(f"字元串日期:{str_datetime},type:{type(str_datetime)}")

執行結果

字元串日期 -> datetime(strptime)

程式碼

from datetime import datetimestr_datetime = "2020-11-29 22:05:20"t = datetime.strptime(str_datetime, "%Y-%m-%d %H:%M:%S")print(f"t:{t},type:{type(t)}")

執行結果

時間加減

這才是本次的重頭戲,好像只有datetime這個包,才有時間加減的。

時間加減的具體用途很多,必須多久過期什麼的,多久之後提醒,都需要提前計算時間,還是很重要的。

程式碼

from datetime import datetimeimport datetime as idatetimet = datetime.now()print(f"當前時間:{t}")three_day = t + idatetime.timedelta(days=3)print(f"三天後時間:{three_day}")

執行結果

可以發現,這個時間確實是+成功了。

但是自帶的時間加減,有個題,只能加天,不能加月,甚至年。

如果想要時間+月等,還要自己寫邏輯。

datetime時間自由加減

有個包正好解決了這個問題。

安裝

pip install python-dateutil

程式碼

from datetime import datetimefrom dateutil.relativedelta import relativedeltat = datetime.now()print(f"當前時間:{t}")three_time = t + relativedelta(months=3)print(f"三個月後時間:{three_time}")one_year = t+relativedelta(years=1)print(f"一年後時間:{one_year}")up_year = t+relativedelta(years=-1)print(f"去年這個時間:{up_year}")

執行結果

用法很簡單,如果想加月/年份,就寫正數,如果想減,就寫負數,這個方法基本上將python在操作時間上的缺點給彌補了。

總結

本篇主要講述的是關於Python時間的相關總結,相對來說,更推薦使用datetime。

需要注意的是,time和datetime是倆類型,是不能混用的。

其實最重要的是字元串時間->時間類型,這個在實際中用的非常多!

順便還有python-dateutil的relativedelta相關方法,能夠自由加減時間,算是挺方便的。

如果在操作過程中有任何問題,記得下面留言,我們看到會第一時間解決問題。


IT145.com E-mail:sddin#qq.com