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。
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(60
或61
是閏秒)
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(60
或61
是閏秒)
6
tm_wday
0 ~ 6(0
是星期一)
7
tm_yday
1 ~ 366(朱利安日)
8
tm_isdst
-1,0,1,-1表示庫確定DST
能用圖片說明白的儘量用圖片說明 -
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_isdst
爲0
或1
,具體取決於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 * c
,l
是每週的行數。
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 + 6
。 l
是每週的行數。
6
calendar.monthcalendar(year,month)
返回int
類型的列表。每個子列表表示一個星期。年份月份以外的天數設置爲0
; 該月內的日期設定爲月份的第幾日:1 ~ 31。
7
calendar.monthrange(year,month)
返回兩個整數。第一個是年度月(month
)的星期幾的代碼; 第二個是當月的天數。表示星期幾爲0
(星期一)至6
(星期日); 月份是1
到12
。
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
模塊