Python日期和時間

Python程序可以通過多種方式處理日期和時間。日期格式之間的轉換是計算機常見問題。Python的時間(time)和日曆(calendar)模塊可用於跟蹤日期和時間。

一些常用代碼示例

  • 獲取當前時間和日期,如:2018-08-18 12:12:00
  • 計算兩個日期相差天數
  • 計算程序運行的時間
#!/usr/bin/python3
#coding=utf-8

import time  
import datetime  

starttime = datetime.datetime.now()  

time.sleep(5)  

endtime = datetime.datetime.now()  
print ((endtime - starttime).seconds )
  • 計算十天之後的日期時間
#!/usr/bin/python3
#coding=utf-8

import time  
import datetime  

d1 = datetime.datetime.now()  
d3 = d1 + datetime.timedelta(days =10)  

print (str(d3))
print (d3.ctime())
  • 獲取兩個日期時間的時間差
t = (datetime.datetime(2019,1,13,12,0,0) - datetime.datetime.now()).total_seconds()
print ("t = ", t)
## 輸出結果
t = 49367780.076406

Python中有提供與日期和時間相關的4個模塊。它們分別是 -

模塊

說明

time

time是一個僅包含與日期和時間相關的函數和常量的模塊,在本模塊中定義了C/C++編寫的幾個類。 例如,struct_time類。

datetime

datetime是一個使用面向對象編程設計的模塊,可以在Python中使用日期和時間。它定義了幾個表示日期和時間的類。

calendar

日曆是一個提供函數的模塊,以及與Calendar相關的幾個類,它們支持將日曆映像生成爲text,html,….

locale

該模塊包含用於格式化或基於區域設置分析日期和時間的函數。

1. 時間間隔

時間間隔是以秒爲單位的浮點數。 從1970年1月1日上午12:00(epoch),這是一種時間的特殊時刻表示。

在Python中,當前時刻與上述特殊的某個時間點之間以秒爲單位的時間。這個時間段叫做Ticks。

Python日期和時間

time模塊中的time()函數返回從1970年1月1日上午12點開始的秒數。

# Import time module.
import time;

# Seconds
ticks = time.time()


print ("Number of ticks since 12:00am, January 1, 1970: ", ticks)

執行上面代碼,得到以下結果 -

Number of ticks since 12:00am, January 1, 1970:  1497970093.6243818

但是,這個形式不能表示在時代(1970年1月1日上午12:00)之前的日期。在未來的日子也不能以這種方式表示 - 截止點是在2038年的UNIX和Windows的某個時刻。

2. 什麼是TimeTuple?

許多Python時間函數將時間處理爲9個數字的元組,如下所示:

索引

字段

0

4位數,表示年份

2018,2019…

1

月份

1 ~ 12

2

日期

1 ~ 31

3

小時

0 ~ 23

4

分鐘

0 ~ 59

5

0 ~ 61(6061是閏秒)

6

星期幾

0 ~ 6(0是星期一)

7

一年的第幾天

1 ~ 366(朱利安日)

8

夏令時

-1,0,1,-1表示庫確定DST

一個示例

import time
print (time.localtime());

這將產生如下結果:

time.struct_time(tm_year = 2016, tm_mon = 2, tm_mday = 15, tm_hour = 9, 
   tm_min = 29, tm_sec = 2, tm_wday = 0, tm_yday = 46, tm_isdst = 0)

上面的元組相當於struct_time結構。此結構具有以下屬性 -

索引

字段

0

tm_year

2018,2019…

1

tm_mon

1 ~ 12

2

tm_mday

1 ~ 31

3

tm_hour

0 ~ 23

4

tm_min

0 ~ 59

5

tm_sec

0 ~ 61(6061是閏秒)

6

tm_wday

0 ~ 6(0是星期一)

7

tm_yday

1 ~ 366(朱利安日)

8

tm_isdst

-1,0,1,-1表示庫確定DST

能用圖片說明白的儘量用圖片說明 -

Python日期和時間

2.1.獲取當前時間

要將從時間浮點值開始的秒數瞬間轉換爲時間序列,將浮點值傳遞給返回具有所有有效九個項目的時間元組的函數(例如本地時間)。

#!/usr/bin/python3
import time

localtime = time.localtime(time.time())
print ("Local current time :", localtime)

# 當前時間
curtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print (curtime)

執行上面代碼,這將產生如下結果 -

Local current time : time.struct_time(tm_year=2017, tm_mon=6, tm_mday=20, tm_hour=23, tm_min=9, tm_sec=36, tm_wday=1, tm_yday=171, tm_isdst=0)
Curtime is =>  2017-06-20 23:09:36

2.2.獲取格式化時間

可以根據需要格式化任何時間,但也可使用可讀格式獲取時間的簡單方法是 - asctime() -

#!/usr/bin/python3
import time

localtime = time.asctime( time.localtime(time.time()) )
print ("Local current time :", localtime)

執行上面代碼,這將產生如下結果 -

Local current time : Mon Feb 15 10:32:13 2018

2.3.獲取一個月的日曆

calendar模塊提供了廣泛的方法來顯示年曆和月度日曆。 在這裏,將打印一個給定月份的日曆(2021年11月) -

#!/usr/bin/python3
import calendar

cal = calendar.month(2021, 11)
print ("Here is the calendar:")
print (cal)

執行上面代碼後,將輸出以下結果 -

   November 2021
Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

3.時間模塊

Python中有一個受歡迎的時間(time)模塊,它提供了處理時間和表示之間轉換的功能。以下是所有時間(time)可用方法的列表。

編號

方法

描述

1

time.altzone

本地DST時區的偏移量(以秒爲單位的UTC),如果定義了有一個定義的話。 如果本地的DST時區是UTC的東部(如在西歐,包括英國),那麼它是負數值。

2

time.asctime([tupletime])

接受時間元組,並返回一個可讀的24個字符的字符串,例如’Tue Dec 11 22:07:14 2019’。

3

time.clock( )

將當前CPU時間返回爲浮點數秒。 爲了測量不同方法的計算成本,time.clock的值比time.time()的值更有用。

4

time.ctime([secs])

類似於asctime(localtime(secs)),而沒有參數就像asctime()

5

time.gmtime([secs])

接受從時代(epoch)以秒爲單位的瞬間,並返回與UTC時間相關的時間元組t。 注 - t.tm_isdst始終爲0

6

time.localtime([secs])

接受從時代(epoch)以秒爲單位的瞬間,並返回與本地時間相關的時間t(t.tm_isdst01,具體取決於DST是否適用於本地規則的瞬時秒)。

7

time.mktime(tupletime)

接受在本地時間表示爲時間元組的瞬間,並返回浮點值,該時間點以秒爲單位表示。

8

time.sleep(secs)

暫停調用線程secs秒。

9

time.strftime(fmt[,tupletime])

接受在本地時間表示爲時間元組的瞬間,並返回一個表示由字符串fmt指定的時間的字符串。

10

time.strptime(str,fmt = ‘%a %b %d %H:%M:%S %Y’)「)

根據格式字符串fmt解析str,並返回時間元組格式的時間。

11

time.time( )

返回當前時間時刻,即從時代(epoch)開始的浮點數秒數。

12

time.tzset()

重置庫例程使用的時間轉換規則。環境變量TZ指定如何完成。

時間(time)模塊有兩個重要的屬性可用。它們是 -

編號

屬性

描述

1

time.timezone

屬性time.timezone是UTC和本地時區(不含DST)之間的偏移量(美洲爲 > 0,歐洲,亞洲,非洲大部分地區爲 0)。

2

time.tzname

屬性time.tzname是一對與區域相關的字符串,它們分別是沒有和具有DST的本地時區的名稱。

4.日曆模塊

calendar模塊提供與日曆相關的功能,包括爲給定的月份或年份打印文本日曆的功能。

默認情況下,日曆將星期一作爲一週的第一天,將星期日作爲最後一天。 如果想要更改這個,可調用calendar.setfirstweekday()函數設置修改。

以下是calendar模塊可用的功能函數列表 -

編號

函數

描述

1

calendar.calendar(year,w = 2,l = 1,c = 6)

返回一個具有年份日曆的多行字符串格式化爲三列,以c個空格分隔。 w是每個日期的字符寬度; 每行的長度爲21 * w + 18 + 2 * cl是每週的行數。

2

calendar.firstweekday( )

返回當前設置每週開始的星期。默認情況下,當日歷首次導入時設置爲:0,表示爲星期一。

3

calendar.isleap(year)

如果給定年份(year)是閏年則返回True; 否則返回:False

4

calendar.leapdays(y1,y2)

返回在範圍(y1,y2)內的年份中的閏年總數。

5

calendar.month(year,month,w = 2,l = 1)

返回一個多行字符串,其中包含年份月份的日曆,每週一行和兩個標題行。 w是每個日期的字符寬度; 每行的長度爲7 * w + 6l是每週的行數。

6

calendar.monthcalendar(year,month)

返回int類型的列表。每個子列表表示一個星期。年份月份以外的天數設置爲0; 該月內的日期設定爲月份的第幾日:1 ~ 31。

7

calendar.monthrange(year,month)

返回兩個整數。第一個是年度月(month)的星期幾的代碼; 第二個是當月的天數。表示星期幾爲0(星期一)至6(星期日); 月份是112

8

calendar.prcal(year,w = 2,l = 1,c = 6)

類似於:calendar.calendar(year,w,l,c)的打印。

9

calendar.prmonth(year,month,w = 2,l = 1)

類似於:calendar.month(year,month,w,l)的打印。

10

calendar.setfirstweekday(weekday)

將每週的第一天設置爲星期幾的代碼。 星期幾的代碼爲0(星期一)至6(星期日)。

11

calendar.timegm(tupletime)

time.gmtime的倒數:以時間元組的形式接受時刻,並返回與從時代(epoch)開始的浮點數相同的時刻。

12

calendar.weekday(year,month,day)

返回給定日期的星期幾的代碼。星期幾的代碼爲0(星期一)至6(星期日); 月數是1(1月)到12(12月)。

5.其他模塊和功能

如果您有興趣,那麼可以在Python中找到其他重要的模塊和功能列表,其中包含日期和時間。以下列出其它有用的模塊 -

  • datetime模塊
  • pytz模塊
  • dateutil模塊