شروع کار با ماژول زمان

  • مدرس: علی بیگدلی
  • تاریخ انتشار: 1402/05/04
  • تعداد بازدید: 236

مقدمه

پرداختن به تاریخ و زمان در پایتون می تواند یک دردسر باشد. خوشبختانه روشی داخلی برای سهولت کار وجود دارد: ماژول زمان پایتون.

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