1. 程式人生 > 實用技巧 >Python處理日期時間的標準庫:time和datetime

Python處理日期時間的標準庫:time和datetime

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理

以下文章來源於Python之王 ,作者小sen

前言

time和datetime是Python處理日期和時間的標準庫。在我們專案的實際開發當中使用率是非常高的。datetime模組有四個重要的類,date,time,datetime,以及timedelta類,分別表示的是日期物件、時間物件、日期時間物件和時間差物件。

時間戳

時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。注意:目前Python中支援的最大的時間戳為32535244799(3001-01-01 15:59:59)

Python的time塊下有很多函式可以轉換常見日期格式。如函式time.time()用於獲取當前時間戳。例如:

importtime
time.time()#返回當前時間的時間戳2000年時間戳都是10位

1557212908.1839943

#獲取毫秒級別的時間戳(爬蟲引數基本用14位時間戳加密)
int(round(time.time()*1000))
1557212908183

在編寫程式碼時,往往涉及時間、日期、時間戳的相互轉換。

「str型別的日期轉換為時間戳」

importtime

#字元型別的時間
t='2019-05-0715:08:28'
#轉為時間陣列
timeArray=time.strptime(t,"%Y-%m-%d%H:%M:%S")
print(timeArray)
#timeArray可以呼叫tm_year等
print(timeArray.tm_year)#2019
#轉為時間戳
timeStamp=int(time.mktime(timeArray))
print(timeStamp)#1381419600


#結果如下
time.struct_time(tm_year=2019,tm_mon=5,tm_mday=7,tm_hour=15,tm_min=8,tm_sec=28,tm_wday=1,tm_yday=127,tm_isdst=-1)
2019
1557212908

「字串格式更改」

#"2019-05-0715:08:28"改為"2019/5/715:08:28"
#先轉換為時間陣列
importtime
str_time="2019-05-0715:08:28"
time_array=time.strptime(str_time,"%Y-%m-%d%H:%M:%S")
other_way_time=time.strftime("%Y/%m/%d%H:%M:%S",time_array)

print(other_way_time)#2019/05/0715:08:28

now=datetime.datetime.now()
otherStyleTime=now.strftime("%Y--%m--%d%H:%M:%S")
print(otherStyleTime)#2019--05--0715:08:28

「時間戳轉時間日期」

importtime
importdatetime
#使用time
timeStamp=1557212908
timeArray=time.localtime(timeStamp)
otherStyleTime=time.strftime("%Y--%m--%d%H:%M:%S",timeArray)
print(otherStyleTime)#2019--05--0715:08:28
#使用datetime
timeStamp=1557212908
dateArray=datetime.datetime.fromtimestamp(timeStamp)
otherStyleTime=dateArray.strftime("%Y--%m--%d%H:%M:%S")
print(otherStyleTime)#2019--05--0715:08:28
#使用datetime,指定utc時間,相差8小時
timeStamp=1557212908
dateArray=datetime.datetime.utcfromtimestamp(timeStamp)
otherStyleTime=dateArray.strftime("%Y--%m--%d%H:%M:%S")
print(otherStyleTime)#2019--05--0707:08:28

Datetime

datetime模組是在time模組的基礎之上做了封裝,提供了更多更好用的類供我們使用,常用的有date、time、datetime、timedelta、tzinfo。但是為了更靈活的處理時間,最好是將time模組和datetime模組中的精髓學習到。

date類

date類:主要用於處理年、月、日。

date類的建構函式如下:datetime.date(year, month, day)

示例:

fromdatetimeimportdate
d=date(1999,9,29)
print(d)
print('year:',d.year)
print('month:',d.month)
print('day:',d.day)

具體輸出:

1999-09-29
year:1999
month:9
day:29

time類

time類:主要用於處理小時、分鐘、秒。

time類的建構函式如下:datetime.time(hour[,minute[,second[,microsecond[,tzinfo]]]])

示例:

fromdatetimeimporttime
t=time(22,45,59)
print(t)
print('hour:',t.hour)
print('minute:',t.minute)
print('second:',t.second)
print('microsecond:',t.microsecond)#微秒
print('格式化輸出:',t.strftime('%H:%M:%S'))
print('Earliest:',datetime.time.min)
print('Latest:',datetime.time.max)

輸出:

22:45:59
hour:22
minute:45
second:59
microsecond:0
格式化輸出:22:45:59
Earliest:00:00:00
Latest:23:59:59.999999

datetime子類

datetime子類是date物件和time物件的結合體,是datetime的子類,和它的方法很類似。

它的建構函式如下:

datetime.datetime(year,month,day[,hour[,minute[,second[,microsecond[,tzinfo]]]]]),

各引數的含義與date、time的建構函式中的一樣,要注意引數值的範圍。

「獲取當前日期和時間」

>>>fromdatetimeimportdatetime
>>>now=datetime.now()#獲取當前datetime
>>>print(now)
2019-05-0716:28:07.198690
>>>print(type(now))
<class'datetime.datetime'>

timedelta類

timedelta類是用來計算二個datetime物件的差值的。可以進行加減乘除運算的,它的例項化方法和datetime物件很類似 此類中包含如下屬性:

  • (1) days:天數。
  • (2) microseconds:微秒數(>=0並且<1秒)。
  • (3) seconds:秒數(>=0並且<1天)。

兩個date或datetime物件相減就可以返回一個timedelta物件。

importdatetimeasdt
date1=dt.date(2020,10,28)
timedel=dt.timedelta(days=4)
print('四天後的日期是:',date1+timedel)

四天後的日期是:2020-11-01