Python의 표준 라이브러리인 datetime을 사용하여 날짜 문자열에서 datetime 객체를 만들고 요일 또는 월의 이름을 문자열로 가져올 수 있습니다. 그러나 해당 문자열의 언어는 환경의 로케일(국가 또는 지역 설정)에 따라 다릅니다.
다음은 모든 언어의 문자열로 날짜에서 요일 또는 월의 이름을 가져오는 두 가지 방법입니다.
- locale 모듈로 로케일 변경
- 새 함수 정의
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)로 변환하여 locale.setlocale()의 ja_JP.UTF-8로 변환하여 일본어로 된 날짜와 월 이름을 가져옵니다. 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
모든 언어의 날짜 문자열에서 주어진 날짜의 요일을 얻으려면 아래 단계에 따라 수행할 수 있습니다.
- locale.setlocale()의 원하는 언어 설정 값(예: ja_JP.UTF-8)에 대한 LC_TIME
- strptime()을 사용하여 문자열을 datetime 객체로 변환
- 다음 형식화 코드를 사용하여 해당 datetime 객체에서 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() 메서드에서 얻은 정수 값을 사용하여 검색하면 목표를 달성할 수 있습니다.