Python 中如何格式化日期

介紹

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 類用來表示日曆日期值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章