使用 Python 的標準庫 datetime,您可以從日期字符串創建一個 datetime 對象,並從中獲取星期幾或月份的名稱作為字符串。但是,這些字符串的語言取決於環境的語言環境(國家或地區設置)。
這裡有兩種方法可以從日期中獲取星期或月份的名稱作為任何語言的字符串。
- 使用語言環境模塊更改語言環境
- 定義一個新函數
有關 datetime 模塊的基本用法以及日期和時間(日期、時間)與字符串之間轉換的方法 strptime() 和 strftime() 的更多信息,請參閱以下文章。
使用語言環境模塊更改語言環境
Python 標準庫提供了一個語言環境模塊來控制語言環境設置。
這取決於環境,但在示例環境中,使用 strftime() 方法中的以下格式化代碼,可以以英文表示法獲得星期和月份的名稱。%A
,%a
,%B
,%b
下面的示例使用 datetime 對象來表示日期和時間(日期和時間),但對於只有日期信息的日期對像也是如此。
import datetime
import locale
dt = datetime.datetime(2018, 1, 1)
print(dt)
# 2018-01-01 00:00:00
print(dt.strftime('%A, %a, %B, %b'))
# Monday, Mon, January, Jan
LC_TIME,時間格式化的語言環境類別設置,使用 locale.getlocale() 檢查,並設置為 None。這個結果取決於環境。
print(locale.getlocale(locale.LC_TIME))
# (None, None)
LC_TIME 到日文 (UTF-8) ja_JP.UTF-8 in locale.setlocale() 以獲取日文的日期和月份名稱。 locale.LC_ALL 可用於設置所有區域設置類別,但請注意,這將影響例如 LC_MONETARY。
請注意,這些更改僅在此代碼中有效。這並不意味著系統環境變量會被重寫。
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
print(locale.getlocale(locale.LC_TIME))
# ('ja_JP', 'UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# 月曜日, 月, 1月, 1
您還可以更改區域設置以使用其他語言符號,例如英語或德語。
locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# Monday, Mon, January, Jan
locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# Montag, Mo, Januar, Jan
如果您想從任何語言的日期字符串中獲取給定日期的星期幾,您可以按照以下步驟操作。
- LC_TIME 到 locale.setlocale() 中所需語言設置的值(例如 ja_JP.UTF-8)
- 使用 strptime() 將字符串轉換為日期時間對象
- 使用以下格式代碼對該日期時間對象調用 strftime():
%A
,%a
,%B
,%b
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
s = '2018-01-01'
s_dow = datetime.datetime.strptime(s, '%Y-%m-%d').strftime('%A')
print(s_dow)
# 月曜日
定義一個新函數
這可以通過定義一個新函數來實現。
datetime 對象的 weekday() 方法為星期一提供整數值 0,為星期日提供整數值 6。
import datetime
dt = datetime.datetime(2018, 1, 1)
print(dt)
# 2018-01-01 00:00:00
print(dt.weekday())
# 0
print(type(dt.weekday()))
# <class 'int'>
有一個類似的方法,isoweekday(),它返回一個整數值 1 表示週一,7 表示週日。請注意,存在細微差別。
print(dt.isoweekday())
# 1
print(type(dt.isoweekday()))
# <class 'int'>
如果我們為每個語言字符串定義一個星期幾的名稱列表,並使用 weekday() 方法獲得的整數值檢索它們,我們就可以實現我們的目標。