مقدمه
پرداختن به تاریخ و زمان در پایتون می تواند یک دردسر باشد. خوشبختانه روشی داخلی برای سهولت کار وجود دارد: ماژول زمان پایتون.
datetime به ما کمک می کند تا عناصر مربوط به زمان مانند تاریخ ها ، ساعت ها ، دقیقه ها ، ثانیه ها ، روزهای هفته ، ماه ها ، سالها و غیره را شناسایی و پردازش کنیم. این سرویس خدمات مختلفی مانند مدیریت مناطق زمانی و صرفه جویی در وقت را ارائه می دهد. این می تواند با داده های زمان سنج کار کند. می تواند روز هفته ، روز ماه و سایر قالب های تاریخ و زمان را از رشته ها استخراج کند.
به طور خلاصه ، یک روش واقعا قدرتمند برای مدیریت هرگونه تاریخ و زمان مربوط به پایتون است.
کلاسهای زمان پایتون
قبل از شروع به نوشتن کد ، لازم است پنج کلاس اصلی را که در ماژول datetime استفاده می شود ، بررسی کنید. بسته به کاری که می خواهیم انجام دهیم ، احتمالاً باید از یک یا چند کلاس مجزا استفاده کنیم:
- datetime - به ما امکان می دهد زمان ها و تاریخ ها را با هم (ماه ، روز ، سال ، ساعت ، ثانیه ، میکرو ثانیه) دستکاری کنیم.
- date - به ما امکان می دهد تاریخ ها را مستقل از زمان (ماه ، روز ، سال) دستکاری کنیم.
- time - به ما امکان می دهد زمان را مستقل از تاریخ (ساعت ، دقیقه ، ثانیه ، میکرو ثانیه) دستکاری کنیم.
- timedelta - مدت زمانی که برای دستکاری تاریخ و اندازه گیری استفاده می شود.
- tzinfo— یک کلاس انتزاعی برای برخورد با مناطق زمانی.
اگر این تمایزات هنوز معنی ندارد ، نگران نباشید! چرا که با ادامه دوره مسائل را بهتر درک خواهید کرد.
ساخت date Object
اول ، بیایید نگاهی دقیق تر به یک شی زمان بیاندازیم. از آنجا که datetime هم یک ماژول است و هم یک کلاس درون آن ماژول ، ما با وارد کردن کلاس datetime از ماژول datetime شروع می کنیم.
سپس ، ما تاریخ و زمان فعلی را چاپ خواهیم کرد تا از نزدیک به آنچه در یک شی تاریخ قرار دارد ، نگاه کنیم. می توانیم این کار را با استفاده از تابع .now () datetime انجام دهیم. و در نهایت با چاپ کردن type شئ ایجاد شده به ماهیت آن پی خواهیم برد.
# import datetime class from datetime module
from datetime import datetime
# get current date
datetime_object = datetime.now()
print(datetime_object)
print('Type :- ',type(datetime_object))
خروجی:
2021-01-24 07:33:27.519511
Type :- <class 'datetime.datetime'>
از نتایج بالا می توان دریافت که datetime_object در واقع یک شی datetime از کلاس datetime است. این شامل سال ، ماه ، روز ، ساعت ، دقیقه ، ثانیه و میکروثانیه است.
مدیریت رشته زمانی و تاریخ ها با strptime () و strftime ()
خوشبختانه ، datetime شامل دو روش strptime () و strftime () برای تبدیل اشیا از رشته ها به اشیا datetime و بالعکس است. strptime () می تواند رشته ها را با اطلاعات تاریخ و زمان بخواند و آنها را به اشیا datetime تبدیل کند ، و strftime () اشیا datetime را دوباره به رشته تبدیل می کند.
البته ، strptime () جادو نیست - نمی تواند هیچ رشته ای را به تاریخ و زمان تبدیل کند و برای تفسیر آنچه که می بیند به کمی کمک نیاز دارد! اما توانایی خواندن بیشتر قالب های رشته ای متداول برای داده های تاریخ و زمان را دارد (برای جزئیات بیشتر به اسناد مراجعه کنید). بیایید به آن یک رشته تاریخ در قالب YYYY-MM-DD بدهیم و ببینیم چه کاری می تواند انجام دهد!
my_string = '2021-01-24'
# Create date object in given time format yyyy-mm-dd
my_date = datetime.strptime(my_string, "%Y-%m-%d")
print(my_date)
print('Type: ',type(my_date))
خروجی:
2021-01-24 00:00:00 Type :- <class 'datetime.datetime'>
توجه داشته باشید که strptime () دو آرگومان به خود اختصاص داده است: رشته (my_string) و "٪ Y-٪ m-٪ d" ، رشته دیگری که به strptime می گوید نحوه تفسیر رشته ورودی my_string. به عنوان مثال ،٪ Y به آن می گوید که انتظار دارد چهار کاراکتر اول رشته سال باشد.
لیست کاملی از این الگوها در اسناد موجود است و که در لینک پیوست شده در دسترس است.
همچنین ممکن است متوجه شده باشید که ساعت 00:00:00 به تاریخ اضافه شده است. به این دلیل که ما یک شی datetime ایجاد کردیم که باید شامل یک تاریخ و یک زمان باشد. 00:00:00 زمان پیش فرض است که اگر هیچ زمانی در رشته ای که وارد می کنیم مشخص نشده باشد ، اختصاص داده می شود.
به هر حال ، ما امیدوار بودیم که عناصر خاص تاریخ را برای تجزیه و تحلیل خود جدا کنیم. یک روش می تواند این کار را با استفاده از ویژگی های کلاس داخلی یک شی datetime مانند .month یا .year انجام دهد:
print('Month: ', my_date.month) # To Get month from date
print('Year: ', my_date.year) # To Get month from year
خروجی:
Month: 10 Year: 2019
گرفتن روز ماه و روز هفته از یک تاریخ
بیایید استخراج بیشتری انجام دهیم ، این بار سعی خواهیم کرد روز ماه و روز هفته را از تاریخ_مراجعه کنیم. Datetime با استفاده از تابع .weekday () روز هفته را به عنوان یک عدد به ما می دهد ، اما ما می توانیم با استفاده از ماژول تقویم و روشی به نام day_name این حالت را به قالب متن (یعنی دوشنبه ، سه شنبه ، چهارشنبه ...) تبدیل کنیم.
ما ابتدا با وارد کردن تقویم و سپس استفاده از .day و .weekday () در my_date شروع خواهیم کرد. از آنجا می توانیم روز هفته را در قالب متن به صورت زیر بدست آوریم:
# import calendar module
import calendar
print('Day of Month:', my_date.day)
# to get name of day(in number) from date
print('Day of Week (number): ', my_date.weekday())
# to get name of day from date
print('Day of Week (name): ', calendar.day_name[my_date.weekday()])
خروجی:
Day of Month: 31 Day of Week (number): 3 Day of Week (name): Thursday
یک لحظه صبر کنید ، کمی عجیب به نظر می رسد! روز سوم هفته باید چهارشنبه باشد نه پنجشنبه ، درست است؟
با استفاده از حلقه for می خواهیم متغیر day_name را از نزدیک بررسی کنیم:
j = 0
for i in calendar.day_name:
print(j,'-',i)
j+=1
خروجی:
0 - Monday 1 - Tuesday 2 - Wednesday 3 - Thursday 4 - Friday 5 - Saturday 6 - Sunday
اکنون می توانیم ببینیم که پایتون هفته ها از روز دوشنبه شروع می کند و به جای اینکه از 1 شروع شود ، از شاخص 0 حساب می شود. بنابراین منطقی است که همانطور که در بالا دیدیم عدد 3 به "پنجشنبه" تبدیل می شود.
گرفتن ساعت و دقیقه از یک شی Datetime پایتون
حالا بیایید زمان را جستجو کنیم و ساعتها و دقیقه ها را از شی datetime استخراج کنیم. دقیقاً مانند کاری که در بالا با ماه و سال انجام دادیم ، می توانیم از ویژگی های کلاس .hour و .minute استفاده کنیم تا ساعت ها و دقیقه های روز را بدست آوریم.
بیایید با استفاده از تابع .now () تاریخ و زمان جدیدی تنظیم کنیم. از زمان نوشتن این مقاله ، 24 ژانویه 2021 ساعت 8:25 صبح است. البته بسته به زمان انتخاب این کد ، نتایج متفاوتی خواهید گرفت!
from datetime import datetime
todays_date = datetime.now()
# to get hour from datetime
print('Hour: ', todays_date.hour)
# to get minute from datetime
print('Minute: ', todays_date.minute)
خروجی:
Hour: 8 Minute: 25
دریافت هفته سال از یک شی Datetime
ما همچنین می توانیم کارهای ساده تر را با datetime انجام دهیم. به عنوان مثال ، اگر بخواهیم بدانیم چه هفته ای از سال است ، چه می شود؟
ما می توانیم سال ، هفته سال و روز هفته را از یک شی datetime با عملکرد (.isocalendar () دریافت کنیم.
به طور خاص ، isocalendar () یک تاپل را با سال ISO ، شماره هفته و روز هفته برمی گرداند. تقویم ISO تقویم استانداردی است که براساس تقویم میلادی استفاده می شود. می توانید جزئیات بیشتری را در آن پیوند بخوانید ، اما برای اهداف ما ، تنها چیزی که باید بدانیم این است که به عنوان یک تقویم عادی کار می کند ، هر هفته از دوشنبه شروع می شود.
# Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
todays_date.isocalendar()
خروجی:
(2021, 3, 7)
توجه داشته باشید که در تقویم ISO ، هفته از 1 شروع به شمارش می کند ، بنابراین در اینجا 7 روز صحیح هفته را نشان می دهد: جمعه.
از مطالب فوق می توان دریافت که این هفته سوم هفته سال است ، اما اگر بخواهیم این عدد را جدا کنیم ، می توانیم این کار را با نمایه سازی دقیقاً همانطور که ممکن است برای لیست های دیگر Python یا tuple انجام دهیم:
todays_date.isocalendar()[1]
خروجی:
3