Python datetime (strftime, strptime) मधील तारखा आणि वेळा स्ट्रिंगमध्ये रूपांतरित करणे

व्यवसाय

Python च्या मानक लायब्ररी datetime तारखा आणि वेळा (तारीख, वेळा आणि वेळा) प्रक्रिया करण्यासाठी वापरली जाऊ शकते. strftime() आणि strptime(), ज्या तारखा आणि वेळा स्ट्रिंगमध्ये आणि मधून रूपांतरित करतात, या पद्धती विविध स्वरूपांमध्ये तारखा आणि वेळा हाताळण्यासाठी वापरल्या जाऊ शकतात.

हे वजाबाकी आणि बेरीज यांसारखी क्रिया देखील करू शकते. उदाहरणार्थ, तुम्ही 10 दिवसांपूर्वीची तारीख किंवा आत्तापासून 3 आठवडे किंवा आतापासून 50 मिनिटांची वेळ सहजपणे मोजू शकता आणि मिळवू शकता.

प्रथम, आम्ही datetime मॉड्यूलमध्ये उपलब्ध असलेल्या ऑब्जेक्ट्सच्या खालील वर्गांचे वर्णन करू.

  • datetime.datetime:तारीख आणि वेळ (तारीख आणि वेळ)
  • datetime.date:तारीख
  • datetime.time:वेळ
  • datetime.timedelta:वेळेचा फरक आणि गेलेली वेळ

strftime() आणि strptime(), ज्या तारीख/वेळ आणि स्ट्रिंग एकमेकांना रूपांतरित करतात, या पद्धती देखील स्पष्ट केल्या आहेत.

  • datetimeवस्तू
    • datetime.now():आजची तारीख, वर्तमान वेळ
    • datetimeऑब्जेक्ट कन्स्ट्रक्टर
    • डेटटाइम ऑब्जेक्टला डेट ऑब्जेक्टमध्ये रूपांतरित करणे
  • dateवस्तू
    • date.today():आजची तारीख
    • तारीख ऑब्जेक्टसाठी कन्स्ट्रक्टर
  • timeवस्तू
    • टाइम ऑब्जेक्टसाठी कन्स्ट्रक्टर
  • timedeltaवस्तू
    • टाइमडेल्टा ऑब्जेक्ट्स तयार करण्यासाठी तारीख वेळ आणि तारीख ऑब्जेक्ट्स वजा करा.
    • टाइमडेल्टा ऑब्जेक्टसाठी कन्स्ट्रक्टर
    • टाइमडेल्टा ऑब्जेक्ट्स वापरून वजाबाकी आणि बेरीज
  • strftime():तारीख आणि वेळेपासून स्ट्रिंगमध्ये रूपांतरण
  • strptime():तारखेपासून तारखेपर्यंतचे रूपांतरण

मानक लायब्ररीमध्ये कॅलेंडर मॉड्यूल देखील समाविष्ट आहे, जे साध्या मजकूर किंवा HTML स्वरूपात कॅलेंडर तयार करते.

datetime ऑब्जेक्ट

डेटटाइम ऑब्जेक्ट म्हणजे एक ऑब्जेक्ट ज्यामध्ये तारीख (वर्ष, महिना, दिवस) आणि वेळ (तास, मिनिट, सेकंद, मायक्रोसेकंद) दोन्ही माहिती असते. तुम्ही खालील विशेषतांसह त्या माहितीत प्रवेश करू शकता.

  • year
  • month
  • day
  • hour
  • minute
  • second
  • microsecond

datetime.now():आजची तारीख, वर्तमान वेळ

datetime.now() तुम्हाला आजची तारीख (वर्तमान तारीख) आणि वर्तमान वेळ असलेली datetime ऑब्जेक्ट देईल.

import datetime

dt_now = datetime.datetime.now()
print(dt_now)
# 2018-02-02 18:31:13.271231

print(type(dt_now))
# <class 'datetime.datetime'>

print(dt_now.year)
# 2018

print(dt_now.hour)
# 18

डेटटाइम ऑब्जेक्टसाठी कन्स्ट्रक्टर

अनियंत्रित तारखा आणि वेळेसाठी डेटटाइम ऑब्जेक्ट्स व्युत्पन्न करणे देखील शक्य आहे.

डेटटाइम ऑब्जेक्टसाठी कन्स्ट्रक्टर खालीलप्रमाणे आहे.

datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

खालील मूल्ये आवश्यक आहेत आणि इतर वगळले जाऊ शकतात. वगळल्यास, डीफॉल्ट मूल्य 0 आहे.

  • year
  • month
  • day
dt = datetime.datetime(2018, 2, 1, 12, 15, 30, 2000)
print(dt)
# 2018-02-01 12:15:30.002000

print(dt.minute)
# 15

print(dt.microsecond)
# 2000

dt = datetime.datetime(2018, 2, 1)
print(dt)
# 2018-02-01 00:00:00

print(dt.minute)
# 0

डेटटाइम ऑब्जेक्टला डेट ऑब्जेक्टमध्ये रूपांतरित करणे

डेटटाइम ऑब्जेक्ट डेट ऑब्‍जेक्‍टमध्‍ये डेट() पद्धतीने रूपांतरित केले जाऊ शकते, जसे पुढे वर्णन केले आहे.

print(dt_now)
print(type(dt_now))
# 2018-02-02 18:31:13.271231
# <class 'datetime.datetime'>

print(dt_now.date())
print(type(dt_now.date()))
# 2018-02-02
# <class 'datetime.date'>

तारीख ऑब्जेक्ट

तारीख ऑब्जेक्ट एक ऑब्जेक्ट आहे ज्यामध्ये तारखेबद्दल माहिती असते (वर्ष, महिना, दिवस). वर्ष, महिना आणि दिवस या गुणधर्मांद्वारे त्यात प्रवेश केला जाऊ शकतो.

date.today():आजची तारीख

वर्तमान तारखेची तारीख ऑब्जेक्ट (आजची तारीख) date.today() सह मिळू शकते.

d_today = datetime.date.today()
print(d_today)
# 2018-02-02

print(type(d_today))
# <class 'datetime.date'>

print(d_today.year)
# 2018

तारीख ऑब्जेक्टसाठी कन्स्ट्रक्टर

तारीख ऑब्जेक्टसाठी कन्स्ट्रक्टर खालीलप्रमाणे आहे

date(year, month, day)

सर्व आवश्यक आहेत आणि वगळले जाऊ शकत नाहीत.

d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01

print(d.month)
# 2

वेळ ऑब्जेक्ट

टाइम ऑब्जेक्ट ही एक वस्तू आहे ज्यामध्ये वेळेबद्दल माहिती असते (तास, मिनिटे, सेकंद आणि मायक्रोसेकंद). तास, मिनिट, सेकंद आणि मायक्रोसेकंद या विशेषतांचा वापर करून त्यात प्रवेश केला जाऊ शकतो.

टाइम ऑब्जेक्टसाठी कन्स्ट्रक्टर

टाइम ऑब्जेक्टचा कन्स्ट्रक्टर खालीलप्रमाणे आहे.

time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

ते सर्व ऐच्छिक आहेत, आणि ते वगळल्यास, ते 0 वर सेट केले जातात.

t = datetime.time(12, 15, 30, 2000)
print(t)
# 12:15:30.002000

print(type(t))
# <class 'datetime.time'>

print(t.hour)
# 12

t = datetime.time()
print(t)
# 00:00:00

timedelta ऑब्जेक्ट

टाइमडेल्टा ऑब्जेक्ट ही एक वस्तू आहे जी दोन तारखा आणि वेळ किंवा निघून गेलेल्या वेळेमधील फरक दर्शवते. त्यात दिवस, सेकंद आणि मायक्रोसेकंदमध्ये माहिती असते आणि दिवस, सेकंद आणि मायक्रोसेकंद या विशेषतांद्वारे प्रवेश केला जाऊ शकतो. total_seconds() पद्धतीचा वापर करून एकूण सेकंदांची संख्या मिळवणे देखील शक्य आहे.

Timedelta ऑब्जेक्ट तयार करण्यासाठी datetime आणि date objects वजा करा.

डेटटाइम ऑब्जेक्ट्स एकमेकांपासून वजा केल्याने टाइमडेल्टा ऑब्जेक्ट मिळतो.

td = dt_now - dt
print(td)
# 1 day, 18:31:13.271231

print(type(td))
# <class 'datetime.timedelta'>

print(td.days)
# 1

print(td.seconds)
# 66673

print(td.microseconds)
# 271231

print(td.total_seconds())
# 153073.271231

तारीख वस्तूंचे एकमेकांपासून वजा केल्याने टाइमडेल्टा ऑब्जेक्ट मिळतो.

टाइमडेल्टा ऑब्जेक्टसाठी कन्स्ट्रक्टर

टाइमडेल्टा ऑब्जेक्टचा कन्स्ट्रक्टर खालीलप्रमाणे आहे

timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

ते सर्व ऐच्छिक आहेत, आणि ते वगळल्यास, ते 0 वर सेट केले जातात.

लक्षात घ्या की टाइमडेल्टा ऑब्जेक्टमध्ये फक्त खालील माहिती असते.

  • अनेक दिवस:days
  • सेकंदांची संख्या:seconds
  • मायक्रोसेकंद संख्या:microseconds

उदाहरणार्थ, खालील दोन समान आहेत

  • weeks=1
  • days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00

print(td_1w.days)
# 7

टाइमडेल्टा ऑब्जेक्ट्स वापरून वजाबाकी आणि बेरीज

टाइमडेल्टा ऑब्जेक्ट डेटटाइम आणि डेट ऑब्जेक्ट्ससह वजाबाकी आणि बेरीज सारख्या ऑपरेशन्स करण्यासाठी वापरला जाऊ शकतो. उदाहरणार्थ, तुम्ही सहजपणे गणना करू शकता आणि एक आठवड्यापूर्वीची तारीख किंवा आतापासून 10 दिवस किंवा आतापासून 50 मिनिटे वेळ मिळवू शकता.

d_1w = d_today - td_1w
print(d_1w)
# 2018-01-26

td_10d = datetime.timedelta(days=10)
print(td_10d)
# 10 days, 0:00:00

dt_10d = dt_now + td_10d
print(dt_10d)
# 2018-02-12 18:31:13.271231

td_50m = datetime.timedelta(minutes=50)
print(td_50m)
# 0:50:00

print(td_50m.seconds)
# 3000

dt_50m = dt_now + td_50m
print(dt_50m)
# 2018-02-02 19:21:13.271231

हे विशिष्ट तारखेपर्यंत दिवसांची संख्या मोजण्यासाठी देखील वापरले जाऊ शकते.

d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00

print(td.days)
# 903

strftime():तारीख आणि वेळेपासून स्ट्रिंगमध्ये रूपांतरण

datetime आणि date ऑब्जेक्ट्सची strftime() पद्धत तारीख आणि वेळ (तारीख आणि वेळ) माहितीचे कोणत्याही फॉरमॅट फॉरमॅटमध्ये स्ट्रिंगमध्ये रूपांतरित करण्यासाठी वापरली जाऊ शकते.

स्वरूपन कोड

उपलब्ध स्वरूपन कोडसाठी खालील अधिकृत दस्तऐवज पहा.

मुख्य स्वरूपन कोड खाली सूचीबद्ध आहेत.

  • %d:शून्य भरलेल्या दशांश नोटेशनमध्ये महिन्याचा दिवस.
  • %m:शून्य भरलेला दशांश अंकातील महिना.
  • %y:शून्य-भरलेल्या दशांश नोटेशनमधील वर्षाचे शेवटचे दोन अंक.
  • %Y:शून्य भरलेल्या दशांश नोटेशनमधील वर्षाचे चार अंक.
  • %H:भरलेल्या शून्यासह दशांश अंकात व्यक्त केल्यावर (24-तास नोटेशन)
  • %I:भरलेल्या शून्यासह दशांश नोटेशनमध्ये व्यक्त केल्यावर (12-तास नोटेशन)
  • %M:भरलेल्या शून्यासह दशांश नोटेशनसाठी.
  • %S:भरलेल्या शून्यासह दशांश अंकातील सेकंद.
  • %f:0 भरलेल्या दशांश नोटेशनमध्ये मायक्रोसेकंद (6 अंक).
  • %A:लोकलसाठी आठवड्याच्या दिवसाचे नाव
  • %a:लोकॅलसाठी दिवसाचे नाव (संक्षिप्त फॉर्म)
  • %B:स्थानिक महिन्याचे नाव
  • %b:स्थानिक महिन्याचे नाव (संक्षिप्त फॉर्म)
  • %j:शून्य भरणासह दशांश नोटेशनमध्ये वर्षाचा दिवस.
  • %U:दशांश नोटेशनमध्ये वर्षाचा आठवडा शून्य फिलसह (आठवडा रविवारी सुरू होतो)
  • %W:दशांश नोटेशनमध्ये वर्षाचा आठवडा शून्य फिलसह (आठवडा सोमवारपासून सुरू होतो)

दिवस आणि महिन्याच्या नावांसाठी खालील फॉरमॅटिंग कोड लोकेलवर अवलंबून वेगवेगळ्या स्ट्रिंगमध्ये मिळू शकतात.

  • %A
  • %a
  • %B
  • %b

ISO 8601 फॉरमॅट स्ट्रिंगसाठी एक समर्पित पद्धत देखील आहे.

नमुना कोड

print(dt_now.strftime('%Y-%m-%d %H:%M:%S'))
# 2018-02-02 18:31:13

print(d_today.strftime('%y%m%d'))
# 180202

print(d_today.strftime('%A, %B %d, %Y'))
# Friday, February 02, 2018

print('Day number (how many days in a year / January 1 is 001):', d_today.strftime('%j'))
print('Week number (the week starts on Sunday / New Year's Day is 00):', d_today.strftime('%U'))
print('Week number (the week begins on Monday / New Year's Day is 00):', d_today.strftime('%W'))
# Day number (how many days in a year / January 1 is 001): 033
# Week number (the week starts on Sunday / New Year's Day is 00): 04
# Week number (the week begins on Monday / New Year's Day is 00): 05

जर तुम्हाला स्ट्रिंगऐवजी संख्या मिळवायची असेल, तर ती फक्त int() सह पूर्णांकात रूपांतरित करा.

week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>

टाइमडेल्टा ऑब्जेक्टच्या संयोजनात, तयार करणे सोपे आहे, उदाहरणार्थ, कोणत्याही स्वरूपातील द्विसाप्ताहिक तारखांची सूची.

d = datetime.date(2018, 2, 1)
td = datetime.timedelta(weeks=2)
n = 8
f = '%Y-%m-%d'

l = []

for i in range(n):
    l.append((d + i * td).strftime(f))

print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']

print('\n'.join(l))
# 2018-02-01
# 2018-02-15
# 2018-03-01
# 2018-03-15
# 2018-03-29
# 2018-04-12
# 2018-04-26
# 2018-05-10

सूची आकलन नोटेशन वापरणे अधिक हुशार आहे.

l = [(d + i * td).strftime(f) for i in range(n)]
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']

strptime():तारखेपासून तारखेपर्यंतचे रूपांतरण

datetime strptime() तारीख किंवा वेळ स्ट्रिंग पासून datetime ऑब्जेक्ट तयार करण्यासाठी वापरले जाऊ शकते. मूळ स्ट्रिंगशी संबंधित स्वरूपन स्ट्रिंग निर्दिष्ट करणे आवश्यक आहे.

ISO 8601 स्ट्रिंगसाठी (Python 3.7 किंवा नंतरची) एक समर्पित पद्धत देखील आहे.

नमुना कोड

date_str = '2018-2-1 12:30'
date_dt = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M')
print(date_dt)
# 2018-02-01 12:30:00

print(type(date_dt))
# <class 'datetime.datetime'>

पुनर्प्राप्त केलेल्या datetime ऑब्जेक्टवर strftime() पद्धत वापरून, तुम्ही मूळ स्ट्रिंगपेक्षा वेगळ्या फॉरमॅटमध्ये तारीख आणि वेळ दर्शवू शकता.

print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30

जर तुम्ही ते डेटटाइम ऑब्जेक्टमध्ये रूपांतरित केले, तर तुम्ही टाइमडेल्टा ऑब्जेक्टसह ऑपरेशन देखील करू शकता, उदाहरणार्थ, तुम्ही त्याच फॉरमॅटमध्ये 10 दिवसांपूर्वीच्या तारखेची स्ट्रिंग तयार करू शकता.

date_str = '2018-2-1'
date_format = '%Y-%m-%d'
td_10_d = datetime.timedelta(days=10)

date_dt = datetime.datetime.strptime(date_str, date_format)
date_dt_new = date_dt - td_10_d
date_str_new = date_dt_new.strftime(date_format)

print(date_str_new)
# 2018-01-22