[譯] Python 中如何格式化日期

介紹

Python 附帶了各類有用的對象,能夠直接使用。例如日期對象就是一個例子。因爲日期和時間的複雜性,日期類型很難從頭開始操做。所幸,Python 日期對象將日期轉換成所需的字符串格式變得至關容易。前端

日期格式化是做爲程序員的你最重要的任務之一。不一樣地區表示日期/時間的方法各不相同,所以你做爲程序員的一大目標是以用戶可讀的方式顯示日期值。python

例如,你可能須要用數字格式表示日期值,如 「02-23-2018」。另外一方面,你可能須要以更長的文本格式(如 「Feb 23,2018「)表示相同的日期。在另外一種狀況下,你可能但願從數字格式的日期值中提取出字符串格式的月份。android

在本文中,咱們將研究不一樣類型的日期對象及其功能。ios

datetime 模塊

正如你猜到的, Python 的 datetime 模塊包含可用於處理日期和時間值的方法。要使用這個模塊,咱們得先經過如下 import 語句將其導入:git

import datetime
複製代碼

咱們能夠使用 time 類表示時間值。時間類的屬性包括小時、分鐘、秒和微秒。程序員

time 類的參數是可選的。儘管不指定任何參數,你將得到 0 的時間(對象),但這大多數時候不太多是你須要的。github

例如,要初始化值爲 1 小時、10 分種、20 秒、13 微秒的時間對象,咱們能夠運行如下命令:後端

t = datetime.time(1, 10, 20, 13)
複製代碼

讓咱們使用 print 功能來查看時間:bash

print(t)
複製代碼

輸出:函數

01:10:20.000013
複製代碼

你可能只須要查看小時、分鐘、秒或者微秒,您能夠像下邊這麼作:

print('hour:', t.hour)
複製代碼

輸出:

hour: 1
複製代碼

能夠按照以下方式檢索上述時間(對象)的分鐘、秒或者微秒:

print('Minutes:', t.minute)
print('Seconds:', t.second)
print('Microsecond:', t.microsecond)
複製代碼

輸出:

Minutes: 10
Seconds: 20
Microseconds: 13
複製代碼

日曆日期指能夠經過 date 類表示。示例具備的屬性有年、月和日。

讓咱們來調用 today 方法來查看今天的日期:

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 類顯示年份,月份和日期:

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 對象上直接調用。如如下示例所示:

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「。下面的例子顯示瞭如何格式化時間:

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'
複製代碼

請考慮如下示例:

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

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索