介紹
Python 附帶了各種有用的對象,可以直接使用。例如日期對象就是一個例子。由於日期和時間的複雜性,日期類型很難從頭開始操作。所幸,Python 日期對象將日期轉換成所需的字符串格式變得相當容易。
日期格式化是作爲程序員的你最重要的任務之一。不同地區表示日期/時間的方法各不相同,因此你作爲程序員的一大目標是以用戶可讀的方式顯示日期值。
例如,你可能需要用數字格式表示日期值,如 “02-23-2018”。另一方面,你可能需要以更長的文本格式(如 “Feb 23,2018”)表示相同的日期。在另一種情況下,你可能希望從數字格式的日期值中提取出字符串格式的月份。
在本文中,我們將研究不同類型的日期對象及其功能。
datetime 模塊
正如你猜到的, Python 的 datetime
模塊包含可用於處理日期和時間值的方法。要使用這個模塊,我們得先通過以下 import
語句將其導入:
import datetime
我們可以使用 time
類表示時間值。時間類的屬性包括小時、分鐘、秒和微秒。
time
類的參數是可選的。儘管不指定任何參數,你將獲得 0 的時間(對象),但這大多數時候不太可能是你需要的。
例如,要初始化值爲 1 小時、10 分種、20 秒、13 微秒的時間對象,我們可以運行以下命令:
t = datetime.time(1, 10, 20, 13)
讓我們使用 print 功能來查看時間:
print(t)
輸出:
01:10:20.000013
你可能只需要查看小時、分鐘、秒或者微秒,您可以像下邊這麼做:
print('hour:', t.hour)
輸出:
hour: 1
可以按照如下方式檢索上述時間(對象)的分鐘、秒或者微秒:
'''
遇到問題沒人解答?小編創建了一個Python學習交流QQ羣:579817333
尋找有志同道合的小夥伴,互幫互助,羣裏還有不錯的視頻學習教程和PDF電子書!
'''
print('Minutes:', t.minute)
print('Seconds:', t.second)
print('Microsecond:', t.microsecond)
輸出:
Minutes: 10
Seconds: 20
Microseconds: 13
日曆日期指可以通過 date
類表示。示例具有的屬性有年、月和日。
讓我們來調用 today
方法來查看今天的日期:
'''
遇到問題沒人解答?小編創建了一個Python學習交流QQ羣:579817333
尋找有志同道合的小夥伴,互幫互助,羣裏還有不錯的視頻學習教程和PDF電子書!
'''
import datetime
today = datetime.date.today()
print(today)
輸出:
2018-09-15
代碼將返回今天的日期,因此你看到的輸出取決於你運行腳本的日期。
現在我們調用 ctime
方法以另一種格式打印日期:
print('ctime:', today.ctime())
輸出:
ctime: Sat Sep 15 00:00:00 2018
ctime
方法會使用比我們之前看到的示例更長的日期時間格式。此方法主要用於將 Unix 時間(從 1970 年 1 月 1 日以來的秒數)轉換爲字符串格式。
以下是我們如何使用 date
類顯示年份,月份和日期:
'''
遇到問題沒人解答?小編創建了一個Python學習交流QQ羣:579817333
尋找有志同道合的小夥伴,互幫互助,羣裏還有不錯的視頻學習教程和PDF電子書!
'''
print('Year:', today.year)
print('Month:', today.month)
print('Day :', today.day)
輸出
Year: 2018
Month: 9
Day : 15
使用 strftime 將日期轉換爲字符串
既然你已經知道如何創建時間和日期對象,那麼讓我們學習如何將它們格式化爲更易讀的字符串。
爲此,我們將使用 strftime
方法。這個方法可以幫助我們將日期對象轉換爲可讀字符串。它需要兩個參數,語法如下所示:
time.strftime(format, t)
第一個參數是格式字符串(以何種格式顯示時間日期,感謝 rocheers 提醒),第二個參數是格式化的時間,可選值。
這個方法也可以在 datetime
對象上直接調用。如以下示例所示:
'''
遇到問題沒人解答?小編創建了一個Python學習交流QQ羣:579817333
尋找有志同道合的小夥伴,互幫互助,羣裏還有不錯的視頻學習教程和PDF電子書!
'''
import datetime
x = datetime.datetime(2018, 9, 15)
print(x.strftime("%b %d %Y %H:%M:%S"))
輸出:
Sep 15 2018 00:00:00
我們使用以下字符串來格式化日期:
%b
: 返回月份名稱的前三個字符。在我們的例子中,它返回 “Sep”。%d
: 返回本月的日期,從 1 到 31。在我們的例子中,它返回 “15”。%Y
: 返回四位數格式的年份。在我們的例子中,它返回 “2018”。%H
: 返回小時。在我們的例子中,它返回 “00”。%M
: 返回分鐘,從 00 到 59。在我們的例子中,它返回 “00”。%S
: 返回秒,從 00 到 59。在我們的例子中,它返回 “00”。
我們沒有時間(對象),因此時間值都是 “00”。下面的例子顯示瞭如何格式化時間:
'''
遇到問題沒人解答?小編創建了一個Python學習交流QQ羣:579817333
尋找有志同道合的小夥伴,互幫互助,羣裏還有不錯的視頻學習教程和PDF電子書!
'''
import datetime
x = datetime.datetime(2018, 9, 15, 12, 45, 35)
print(x.strftime("%b %d %Y %H:%M:%S"))
輸出:
Sep 15 2018 12:45:35
完整的字符代碼列表
除了上面給出的字符串外,strftime
方法還使用了其他幾個指令來格式化日期值:
%a
: 返回工作日的前三個字符,例如 Wed。%A
: 返回返回工作日的全名,例如 Wednesday。%B
: 返回月份的全名,例如 September。%w
: 返回工作日作爲數字,從 0 到 6,週日爲 0。%m
: 將月份作爲數字返回,從 01 到 12。%p
: 返回 AM/PM 標識。%y
: 返回兩位數格式的年份,例如,”18“ 而不是 ”2018“。%f
: 返回從 000000 到 999999 的微秒。%Z
: 返回時區。%z
: 返回 UTC 偏移量。%j
: 返回當年的日期編號,從 001 到 366。%W
: 返回年份的週數,從 00 到 53。星期一被記爲一週第一天。%U
: 返回年份的週數,從 00 到 53。星期日被記爲一週第一天。%c
: 返回本地日期和時間版本。%x
: 返回本地日期版本。%X
: 返回本地時間版本。
譯者備註:原文中的是 weekday,在查了一些資料後翻譯成 “工作日”,但是考慮以下示例:
from datetime import datetime
x = datetime.now()
x.strftime("%A")
輸出:
'Sunday'
請考慮以下示例:
'''
遇到問題沒人解答?小編創建了一個Python學習交流QQ羣:579817333
尋找有志同道合的小夥伴,互幫互助,羣裏還有不錯的視頻學習教程和PDF電子書!
'''
import datetime
x = datetime.datetime(2018, 9, 15)
print(x.strftime('%b/%d/%Y'))
輸出:
Sep/15/2018
以下是你只獲取月份的方法:
print(x.strftime('%B'))
輸出:
September
讓我們只展示年份:
print(x.strftime('%Y'))
輸出:
2018
在這個例子中,我們使用了格式化代碼 %Y
。請注意,它的 Y 是大寫的,現在使用小寫寫:
print(x.strftime('%y'))
輸出:
18
這次省略了年份中前兩位數字。如你所見,使用這些格式化代碼,你可以用你想要的任何方式表示日期時間。
使用 strptime 將字符串轉換成日期
strftime
方法幫助我們將日期對象轉換爲可讀的字符串,strptime
恰恰相反。它作用於字符串,並將它們轉換成 Python 可以理解的日期對象。
這是這個方法的語法:
datetime.strptime(string, format)
string
參數是我們轉換成日期格式的字符串值。format
參數是指定轉換後日期採用的格式的指令。
例如,如果我們需要將字符串 “9/15/18” 轉換成 datetime
對象。
我們先導入 datetime
模塊,我們將使用 from
關鍵字以便能夠在沒有點格式的情況下引用模塊中特定的函數:
from datetime import datetime
然後我們可以用字符串形式定義日期:
str = '9/15/18'
在將字符串轉換爲實際的 datetime
對象之前,Python 無法將上述字符串理解爲日期時間。我們可以通過調用 strptime
方法成功完成:
執行以下命令轉換字符串:
date_object = datetime.strptime(str, '%m/%d/%y')
現在讓我們調用 print
函數用 datetime
格式顯示字符串:
print(date_object)
輸出:
2018-09-15 00:00:00
如你所見,轉換成功!
你可以看到正斜槓 “/” 用於分隔字符串的各個元素。這告訴 strptime
方法我們的日期是什麼格式,我們的例子中是用 “/” 作爲分隔符。
但是,如果月/日/年被 “-” 分隔怎麼辦?你應該這麼處理:
from datetime import datetime
str = '9-15-18'
date_object = datetime.strptime(str, '%m-%d-%y')
print(date_object)
輸出:
2018-09-15 00:00:00
再一次,多虧了格式說明符,strptime
方法能夠解析我們的日期並將其轉換爲日期對象。
結論
在本文中,我們研究瞭如何在 Python 中格式化日期。我們看到 Python 中的 datetime
模塊如何操作日期和時間值。該模塊包含了許多操作日期時間的類,比如,time
類用於表示時間值,而 date
類用來表示日曆日期值。