با استفاده از تاریخ کتابخانه استاندارد پایتون، می توانید یک شی datetime از یک رشته تاریخ ایجاد کنید و نام روز هفته یا ماه را از آن به عنوان یک رشته دریافت کنید. با این حال، زبان آن رشته ها به محل (تنظیم کشور یا منطقه) محیط بستگی دارد.
در اینجا دو روش برای دریافت نام روز هفته یا ماه از تاریخ به عنوان رشته در هر زبانی وجود دارد.
- محلی را با ماژول محلی تغییر دهید
- یک تابع جدید تعریف کنید
برای اطلاعات بیشتر در مورد استفاده اولیه از ماژول datetime و متدهای strptime() و strftime() برای تبدیل بین تاریخ و زمان (تاریخ، زمان) و رشته ها، لطفاً به مقالات زیر مراجعه کنید.
تغییر زبان با ماژول محلی
کتابخانه استاندارد پایتون یک ماژول محلی برای کنترل تنظیمات محلی ارائه می دهد.
بستگی به محیط دارد، اما در محیط مثال، با استفاده از کد قالب بندی زیر در متد 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 در 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 به مقدار تنظیم زبان مورد نظر (به عنوان مثال ja_JP.UTF-8) در locale.setlocale()
- تبدیل رشته به شی datetime با strptime()
- strftime() را روی شی datetime با کد قالب بندی زیر فراخوانی کنید:
%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)
# 月曜日
یک تابع جدید تعریف کنید
این را می توان با تعریف یک تابع جدید به دست آورد.
متد weekday() شیء datetime مقدار صحیح 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() آنها را بازیابی کنیم، می توانیم به هدف خود برسیم.