Python程式可以通過多種方式處理日期和時間。日期格式之間的轉換是計算機常見問題。Python的時間(time
)和日曆(calendar
)模組可用於跟蹤日期和時間。
#!/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 |
該模組包含用於格式化或基於區域設定分析日期和時間的函式。 |
時間間隔是以秒為單位的浮點數。 從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的某個時刻。
許多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 |
能用圖片說明白的盡量用圖片說明 -
要將從時間浮點值開始的秒數瞬間轉換為時間序列,將浮點值傳遞給返回具有所有有效九個專案的時間元組的函式(例如本地時間)。
#!/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
可以根據需要格式化任何時間,但也可使用可讀格式獲取時間的簡單方法是 - 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
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
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的本地時區的名稱。 |
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月)。 |
如果您有興趣,那麼可以在Python中找到其他重要的模組和功能列表,其中包含日期和時間。以下列出其它有用的模組 -
datetime
模組pytz
模組dateutil
模組