एक स्ट्रिंग के रूप में पायथन में एक तारीख से सप्ताह या महीने का दिन प्राप्त करें (जैसे जर्मन या अंग्रेजी)

व्यापार

पायथन के मानक पुस्तकालय डेटाटाइम का उपयोग करके, आप दिनांक स्ट्रिंग से डेटाटाइम ऑब्जेक्ट बना सकते हैं और स्ट्रिंग के रूप में सप्ताह या महीने के दिन का नाम प्राप्त कर सकते हैं। हालाँकि, उन स्ट्रिंग्स की भाषा परिवेश के स्थान (देश या क्षेत्र सेटिंग) पर निर्भर करती है।

किसी भी भाषा में स्ट्रिंग के रूप में तिथि से सप्ताह या महीने के दिन का नाम प्राप्त करने के दो तरीके यहां दिए गए हैं।

  • लोकेल मॉड्यूल के साथ लोकेल बदलें
  • एक नया फ़ंक्शन परिभाषित करें

दिनांक और समय (दिनांक, समय) और स्ट्रिंग्स के बीच कनवर्ट करने के लिए डेटाटाइम मॉड्यूल और विधियों strptime() और strftime() के मूल उपयोग के बारे में अधिक जानकारी के लिए, कृपया निम्नलिखित लेख देखें।

लोकेल मॉड्यूल के साथ लोकेल बदलें

पायथन मानक पुस्तकालय लोकेल सेटिंग्स को नियंत्रित करने के लिए एक लोकेल मॉड्यूल प्रदान करता है।

यह पर्यावरण पर निर्भर करता है, लेकिन उदाहरण के वातावरण में, निम्न स्वरूपण कोड का उपयोग करके strftime() विधि में, सप्ताह के दिनों और महीनों के नाम अंग्रेजी संकेतन में प्राप्त किए जा सकते हैं।
%A,%a,%B,%b

निम्न उदाहरण दिनांक और समय (दिनांक और समय) का प्रतिनिधित्व करने के लिए डेटाटाइम ऑब्जेक्ट का उपयोग करता है, लेकिन यह दिनांक ऑब्जेक्ट के लिए भी सही है जिसमें केवल दिनांक जानकारी होती है।

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() के साथ चेक किया जाता है, और यह कोई नहीं पर सेट होता है। यह परिणाम पर्यावरण पर निर्भर करता है।

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

यदि आप किसी दिनांक स्ट्रिंग से किसी भी भाषा में सप्ताह का दिन प्राप्त करना चाहते हैं, तो आप नीचे दिए गए चरणों का पालन करके ऐसा कर सकते हैं।

  • लोकेल.सेटलोकेल () में वांछित भाषा सेटिंग (जैसे ja_JP.UTF-8) के मान के लिए LC_TIME
  • स्ट्रिंग को स्ट्रैपटाइम के साथ डेटाटाइम ऑब्जेक्ट में कनवर्ट करना ()
  • निम्न स्वरूपण कोड के साथ उस डेटाटाइम ऑब्जेक्ट पर 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)
# 月曜日

एक नया फ़ंक्शन परिभाषित करें

यह एक नए कार्य को परिभाषित करके प्राप्त किया जा सकता है।

डेटाइम ऑब्जेक्ट की कार्यदिवस () विधि सोमवार के लिए 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'>

यदि हम प्रत्येक भाषा स्ट्रिंग के लिए सप्ताह के दिनों के नामों की एक सूची को परिभाषित करते हैं और उन्हें कार्यदिवस () विधि द्वारा प्राप्त पूर्णांक मानों का उपयोग करके पुनः प्राप्त करते हैं, तो हम अपना लक्ष्य प्राप्त कर सकते हैं।