ویدیو آموزش ماژول datetime در پایتون - کار با تاریخ و زمان

امیرحسین بیگدلو April 2023

کار با تاریخ و زمان یکی از بزرگترین چالش های برنامه نویسی است. بین پرداختن به مناطق زمانی ، ساعت تابستانی و قالب های مختلف تاریخ نوشته شده ، پیگیری اینکه به چه روزها و ساعاتی اشاره می کنید دشوار است. خوشبختانه ، ماژول datetime پایتون می تواند به شما در مدیریت ماهیت پیچیده تاریخ و زمان کمک کند.

 

یکی از مشکلات مهمی که هر توسعه‌دهنده هنگام کار با تاریخ و زمان با آن مواجه می‌شود، مسئله تفاوت در مناطق زمانی در سراسر جهان است. با ماژول datetime پایتون می توانید برنامه هایی بنویسید که روز ماه، روز هفته و تاریخ و زمان محلی را بر حسب دقیقه، ساعت، ثانیه یا میلی ثانیه دریافت می کنند.

 

ماژول datetime پایتون از پنج کلاس اصلی date، time، tzinfo، DateTime و timedelta تشکیل شده است. در این مقاله، این کلاس‌ها را مورد بحث قرار می‌دهیم و مثال‌های مربوط به هر کدام را پوشش می‌دهیم.

 

ویدیو پیشنهادی: ویدیوهای آموزش پیشرفته پایتون

 

 #  کلاس datetime: کار با تاریخ و زمان

کلاس datetime به توسعه دهندگان پایتون امکان دستکاری تاریخ و زمان را می دهد. برای استفاده از کلاس datetime در برنامه پایتون، باید آن را از ماژول datetime وارد کنیم. بیایید یک برنامه ساده پایتون برای چاپ زمان و تاریخ با استفاده از ماژول datetime پایتون بنویسیم:

from datetime import datetime

print(datetime.now())

# OUTPUT
2022-02-02 12:16:36.903552

 

کد بالا زمان الآن شامل سال، ماه، تاریخ، ساعت، دقیقه و ثانیه را چاپ می کند.

 

 

 +  تبدیل رشته به تاریخ با تابع strptime پایتون

تابع strptime() رشته را به یک آبجکت DateTime تبدیل می کند. کد زیر نحوه استفاده از این متد در پایتون را نشان می دهد:

from datetime import datetime

date_in_string = '2021-11-19'
convert_date_to_object = datetime.strptime(date_in_string, '%Y-%m-%d')
print(convert_date_to_object)

# OUTPUT
2021-11-19 00:00:00

 

در کد بالا، تابع strptime دو آرگومان می گیرد، تاریخی که به شکل رشته ذخیره شده و آرگومان دوم که فرمت تاریخ را نشان می دهد که مشخص میکند متغیر اول چگونه باید نمایش داده شود.

 

لیست زیر فرمت های مختلف برای نمایش متغیرهای DateTime پایتون را نشان می دهد:

%a:  abbreviated weekday as Sun, Mon
%A:  weekdays full name 
%w:  weekdays as number
%d:  days in number and zero-padded 01, 02
%b:  Months abbreviate as Apr, Jun
%B:  Months full name April, June
%m:  months in number and zero-padded 03, 06
%y:   Year without century 21, 20, 19
%Y:  Year with century 2021, 2020, 2019
%H:  24 hours clock 00 - 23 zero-padded
%I:   12 hours clock 01 - 12 zero-padded
%p:   Period of the day as AM/PM
%M:  Minutes from 00 - 59 zero-padded
%s:   seconds from 00 - 59 zero-padded
%f:    microseconds 6 decimal places

 

برای تأیید اینکه خروجی یک آبجکت است، از تابع type استفاده کنید:

print(type(convert_date_to_object))

# OUTPUT
<class 'datetime.datetime'>

 

 

 +  تبدیل تاریخ به رشته با تابع strftime پایتون

تابع strftime آبجکت DateTime را به رشته(string) تبدیل می کند. کد زیر نحوه استفاده از متد strftime() در پایتون را نشان می دهد:

from datetime import datetime

time_as_object = datetime.today()
time_as_string = time_as_object.strftime("%Y-%m-%d %H:%M:%S")

print(time_as_string)

# OUTPUT
2022-02-02 12:30:07

 

برای تایید اینکه به درستی تاریخ به رشته تبدیل شده است،‌ میتوانید از تابع type استفاده کنید:

print(type(time_as_string))

# OUTPUT
<class 'str'>

 

توجه: فرمت های بیشتری وجود دارد که من در اینجا نیاوردم. می توانید به لیست بالا مراجعه کنید و فرمت های مختلف را برای تمرین امتحان کنید.

 

ویدیو پیشنهادی: ویدیو آموزش ماژول time پایتون - کار با زمان

 

 #  کلاس date: استخراج روز هفته و روز ماه

آبجکت date پایتون تاریخ را به صورت سال، ماه و روز نشان می دهد. در این بخش، روز هفته، روز ماه و سال را از کلاس date استخراج می کنیم. همچنین با استفاده از ماژول calendar، نام روز را دریافت خواهیم کرد.

 

زبان برنامه نویسی پایتون شمارش روز هفته را از دوشنبه(monday) شروع می کند. به عنوان یک قانون کلی برنامه نویسی، روز اول از ایندکس 0 شروع می شود.

 

قبل از استخراج محتوای کلاس date، بیایید نحوه خواندن روزهای هفته توسط پایتون را با قطعه کد زیر نشان دهیم:

import calendar
for i in calendar.day_name:
        print(i)

# OUTPUT
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

 

با این جزئیات، می‌توانیم شروع به استخراج روز و ماه از تاریخ کنیم. قطعه کد زیر نحوه استخراج اجزای مختلف را نشان می دهد:

from datetime import date
import calendar

day_variable = date.today()
print(day_variable)
# this will print year, month, date and the time the code was run

# to print index of day of the week
print(day_variable.weekday)

# to print the date
print(day_variable.day)

# to print the month in number
print(day_variable.month)

# to print the year
print(day_variable.year)

# to print the name of the day
print(calendar.day_name[day_variable.weekday()])

 

 

 #  کلاس time: استخراج ساعت، دقیقه و ثانیه

آبجکت time یک کلاس در ماژول datetime پایتون است که زمان محلی را نشان می دهد. بیایید ببینیم چگونه ساعت، دقیقه و ثانیه را از کلاس time استخراج کنیم. time پایتون برخی از آرگومان های اختیاری را می گیرد که رایج ترین آنها ساعت، دقیقه، ثانیه و میلی ثانیه است.

 

قطعه کد زیر نحوه استفاده از time پایتون را نشان می دهد:

from datetime import time

# instantiate a new time object
time_variable = time()

# extract its component
print('The hour is: ', time_variable.hour)

print('The minute: ', time_variable.minute)

print('The second is: ', time_variable.second)

 

نتیجه کد بالا به شرح زیر است:

0 
0 
0

 

کد بالا نشان دهنده مقدار پیش فرض ساعت، دقیقه و ثانیه در کلاس time پایتون است. بیایید زمان را مقداردهی کنیم:

from datetime import time

# instantiate a new time object
time = time(7, 57, 5)

# extract its component
print("The hour is: ",  time.hour)
print("The minute is: ",  time.minute)
print("The second is: ",  time.second)

 

نتیجه کد بالا به شرح زیر است:

The hour is: 7
The minute is: 57
The second is: 5

 

در مثال بالا، مقادیر زمان را خودمان مشخص کردیم، اما باید برنامه ای بنویسیم که زمان محلی را از کامپیوتر بگیرد. پس مؤلفه time را طبق مثال زیر استخراج می کنیم:

from datetime import datetime
import calendar

time = datetime.now()

# print year, month, day, and time (hour, minute, seconds, and microseconds)
print(time.today())

# extract the component by printing them out
print(time.year)

# this will print the current year
# print the month
print(time.month)

# print the index of the day of the week
print(time.weekday())

# print the date of the month in a number format
print(time.day)

# print the name of the day of the month
print(calendar.day_name[time.weekday()])

 

 

 #  کلاس tzinfo: کار با منطقه زمانی

با استفاده از کلاس tzinfo میتوانید با مناطق زمانی کار کنید. در بخش قبل که با datetime.now تاریخ و زمان را دریافت میکردید، پایتون اطلاعات را از کامپیوتر محلی شما میگرفت. فرض کنید روی پروژه ای کار میکنید که مخاطب جهانی دارند و قرار است هر مخاطب تاریخ و زمان را براساس منطقه زمانی خود ببیند. برای حل این مشکل میتوانید از tzinfo استفاده کنید. اما tzinfo دارای اشکالات بسیاری است و به جای آن میتوانید از ماژول pytz پایتون استفاده کنید:

from datetime import datetime
import pytz

# get the local time
local_time = datetime.now()
print("Local time is: ", local_time)

tehran = pytz.timezone('Asia/Tehran')
datetime_in_tehran = datetime.now(tehran)
print(datetime_in_tehran)

# use f string and print timezone and time together
print(f'Time in {tehran} is {datetime_in_tehran}')

 

بسته به اینکه در کجای کره زمین هستید، می توانید از این ماژول پایتون استفاده کنید و زمان هر منطقه زمانی را چاپ کنید. به عنوان مثال، من در تهران، آسیا هستم، و می خواهم زمان فعلی را در مسکو، اروپا چاپ کنم. من می توانم این کار را با استفاده از قطعه کد زیر انجام دهم:

from datetime import datetime
import pytz

timeZone_in_Moscow = pytz.timezone('Europe/Moscow')
datetime_in_Moscow = datetime.now(timeZone_in_Moscow)
print(datetime_in_Moscow)

 

این برنامه زمان فعلی در مسکو را روی کنسول چاپ می کند. اکنون که می دانیم چگونه زمان را در مناطق زمانی مختلف بدست آوریم، بیایید در مورد timedelta صحبت کنیم.

 

 

 #  کلاس timedelta: دریافت تفاوت زمانی

Timedelta پایتون یک آبجکت است که نشان دهنده مدت زمان است، که تفاوت بین دو زمان یا تاریخ را نشان میدهد. timedelta که در ماژول datetime پایتون یافت می‌شود، آرگومان‌های اختیاری را با تمام مقادیر اولیه صفر می‌گیرد.

 

برای دریافت تفاوت بین دو زمان یا تاریخ، ابتدا باید timedelta را وارد کنیم:

# import timedelta
from datetime import timedelta, datetime

# get current time
today = datetime.now()

# create a timedelta
weeks_ago = timedelta(weeks=4)

# print the difference between today and 4 weeks ago

difference = today - weeks_ago
print(difference)

 

آبجکت timedelta می تواند پارامترهای زیر را داشته باشد: هفته، ثانیه، دقیقه، میلی ثانیه، میکروثانیه، ساعت و روز. نتیجه کد بالا بر اساس زمان اجرای برنامه متفاوت خواهد بود.

ویدیوهای مشابه



ارسال نظر


Said

1 سال قبل پاسخ به نظر

واقعا ممنون
خیلی خیلی لطف بزرگی به علاقمندان به آموزش پایتون میکنید
ایشالا سالم و موفق باشید

ارسال نظر



SaLaR

3 سال قبل پاسخ به نظر

خیلیییییی خوب بود :)
مرسیییییی

ارسال نظر



مونگارد