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

ماژول datetime در پایتون

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

مثال ۱: دریافت تاریخ و زمان کنونی

import datetime

datetime_object = datetime.datetime.now()
print(datetime_object)

پس از اجرای برنامه بالا، خروجی به صورت زیر است.

2018-12-19 09:26:03.478039

در اینجا، ماژول datetime با استفاده از دستور import datetime بهبود داده شده است. یکی از کلاس‌های تعریف شده در ماژول datetime، کلاس datetime است. سپس، متد ()now برای ساخت یک شی datetime که حاوی تاریخ و زمان کنونی است مورد استفاده قرار گرفته است.

مثال ۲: دریافت تاریخ کنونی

import datetime

date_object = datetime.date.today()
print(date_object)

هنگامی که برنامه اجرا شد، خروجی به صورت زیر خواهد بود.

2018-12-19

در این برنامه، متد ()today در کلاس date تعریف شده است تا یک شی date حاوی تاریخ محلی کنونی را دریافت کند.

درون ماژول datetime در پایتون چیست؟

می‌توان از تابع ()dir برای دریافت لیست حاوی همه خصیصه‌های یک مدل استفاده کرد.

import datetime

print(dir(datetime))

هنگام اجرای برنامه، خروجی به صورت زیر خواهد بود.

['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']

کلاس‌های متداول و محبوبی که در ماژول datetime مورد استفاه قرار می‌گیرند، در زیر بیان شده‌اند.

  • کلاس date
  • کلاس time
  • کلاس datetime
  • کلاس timedelta

کلاس datetime.date

در اامه مطلب ماژول datetime در پایتون به کلاس datetime.date پرداخته شده است. می‌توان از شی date از کلاس date نمونه‌سازی کرد. یک شی date، نشانگر یک تاریخ (سال، ماه و روز) است.

مثال ۳: شی date برای نمایش تاریخ

import datetime

d = datetime.date(2019, 4, 13)
print(d)

پس از اجرای برنامه، خروجی به صورت زیر خواهد بود.

2019-04-13

در مثال بالا، ()date سازنده کلاس date است. سازنده سه آرگومان سال، ماه و روز را دریافت می‌کند. متغیر a یک شی date است. کلاس date را تنها می‌توان از ماژول datetime «وارد» (ایمپورت | Import) کرد. در ادامه، قطعه کد مربوط به چگونگی انجام این کار ارائه شده است.

from datetime import date

a = date(2019, 4, 13)
print(a)

مثال ۴: دریافت تاریخ کنونی

می‌توان شی date که حاوی تاریخ کنونی است را با استفاده از یک «متد کلاس» (Classmethod) با عنوان ()today ساخت. در ادامه، قطعه کد مربوط به این مورد ارائه شده است.

from datetime import date

today = date.today()

print("Current date =", today)

مثال ۵: دریافت date از timestamp

می‌توان شی date را از timestamp نیز ساخت. یک ساعت «ساعت یونیکس» (Unix Timestamp) تعداد ثانیه‌های بین یک تاریخ مشخص و ۱ ژانویه ۱۹۷۰ است. می‌توان timestamp را با استفاده از متد ()fromtimestamp به تاریخ تبدیل کرد.

from datetime import date

timestamp = date.fromtimestamp(1326244364)
print("Date =", timestamp)

پس از اجرای کد بالا، خروجی به صورت زیر خواهد بود.

Date = 2012-01-11

مثال ۶: چاپ سال، ماه و روز

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

from datetime import date

# date object of today's date
today = date.today() 

print("Current year:", today.year)
print("Current month:", today.month)
print("Current day:", today.day)

datetime.time

یک شی time از کلاس time که زمان محلی را نشان می‌دهد، نمونه‌سازی شده است.

مثال ۷: شی زمان برای نمایش زمان

from datetime import time

# time(hour = 0, minute = 0, second = 0)
a = time()
print("a =", a)

# time(hour, minute and second)
b = time(11, 34, 56)
print("b =", b)

# time(hour, minute and second)
c = time(hour = 11, minute = 34, second = 56)
print("c =", c)

# time(hour, minute, second, microsecond)
d = time(11, 34, 56, 234566)
print("d =", d)

با اجرای قطعه کد بالا، خروجی به صورت زیر خواهد بود.

a = 00:00:00
b = 11:34:56
c = 11:34:56
d = 11:34:56.234566

مثال ۸: چاپ ساعت، دقیقه، ثانیه و میکروثانیه

هنگامی که شی زمان ساخته شد، می‌توان به سادگی خصیصه‌های آن مانند minute، hour و دیگر موارد را ویرایش کرد.

from datetime import time

a = time(11, 34, 56)

print("hour =", a.hour)
print("minute =", a.minute)
print("second =", a.second)
print("microsecond =", a.microsecond)

با اجرای مثال بالا، خروجی به صورت زیر خواهد بود:

hour = 11
minute = 34
second = 56
microsecond = 0

توجه به این نکته لازم است که آرگومان microsecond در قطعه کد بالا پاس داده نشده است. بنابراین، مقادیر پیش‌فرض ۰ چاپ شده است.

datetime.datetime

ماژول datetime دارای یک کلاس با نام dateclass است که حاوی اطلاعاتی پیرامون اشیای date و time است.

مثال ۹: شی datetime پایتون

from datetime import datetime

#datetime(year, month, day)
a = datetime(2018, 11, 28)
print(a)

# datetime(year, month, day, hour, minute, second, microsecond)
b = datetime(2017, 11, 28, 23, 55, 59, 342380)
print(b)

پس از اجرای کد بالا، خروجی به صورت زیر خواهد بود:

2018-11-28 00:00:00
2017-11-28 23:55:59.342380

سه آرگومان اول month ،year و day در سازنده ()datetime اجباری هستند.

مثال ۱۰: چاپ سال، ماه، ساعت، دقیقه و timestamp

from datetime import datetime

a = datetime(2017, 11, 28, 23, 55, 59, 342380)
print("year =", a.year)
print("month =", a.month)
print("hour =", a.hour)
print("minute =", a.minute)
print("timestamp =", a.timestamp())

پس از اجرای برنامه، خروجی به صورت زیر خواهد بود:

year = 2017
month = 11
day = 28
hour = 23
minute = 55
timestamp = 1511913359.34238

datetime.timedelta

شی timedelta تفاوت بین دو تاریخ یا زمان را نشان می‌دهد.

مثال ۱۱: تفاوت بین دو تاریخ و ساعت

from datetime import datetime, date

t1 = date(year = 2018, month = 7, day = 12)
t2 = date(year = 2017, month = 12, day = 23)
t3 = t1 - t2
print("t3 =", t3)

t4 = datetime(year = 2018, month = 7, day = 12, hour = 7, minute = 9, second = 33)
t5 = datetime(year = 2019, month = 6, day = 10, hour = 5, minute = 55, second = 13)
t6 = t4 - t5
print("t6 =", t6)

print("type of t3 =", type(t3)) 
print("type of t6 =", type(t6))

هنگامی که برنامه اجرا شد، خروجی به صورت زیر خواهد بود.

t3 = 201 days, 0:00:00
t6 = -333 days, 1:14:20
type of t3 = <class 'datetime.timedelta'>
type of t6 = <class 'datetime.timedelta'>

توجه به این نکته لازم است که t3 و t6 از نوع <class ‘datetime.timedelta’> هستند.

مثال ۱۲: تفاوت بین دو شی timedelta

from datetime import timedelta

t1 = timedelta(weeks = 2, days = 5, hours = 1, seconds = 33)
t2 = timedelta(days = 4, hours = 11, minutes = 4, seconds = 54)
t3 = t1 - t2

print("t3 =", t3)

با اجرای قطعه کد بالا، خروجی به صورت زیر خواهد بود.

t3 = 14 days, 13:55:39

در اینجا، دو شی timedelta با عنوان t1 و t2 ساخت شده و تفاوت آن‌ها روی صفحه چاپ شده است.

مثال ۱۳: چاپ کردن شی timedelta منفی

from datetime import timedelta

t1 = timedelta(seconds = 33)
t2 = timedelta(seconds = 54)
t3 = t1 - t2

print("t3 =", t3)
print("t3 =", abs(t3))

پس از اجرای برنامه بالا، خروجی به صورت زیر خواهد بود.

t3 = -1 day, 23:59:39
t3 = 0:00:21

مثال ۱۴: مدت زمان به ثانیه

می‌توان کل مدت ثانیه را با استفاده از شی timedelta و متد ()total_seconds دریافت کرد.

from datetime import timedelta

t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423)
print("total seconds =", t.total_seconds())

خروجی حاصل از اجرای قطعه کد بالا، به صورت زیر است.

total seconds = 435633.233423

همچنین، می‌توان دو تاریخ و زمان را با استفاده از عملگرد «+» تجمیع کرد. همچنین، می‌توان یک شی timedelta را در «اعداد صحیح» (Integers) و «ممیز شناور» (floats) ضرب و یا بر آن‌ها تقسیم کرد.

فرمت پایتون datetime

مدلی که تاریخ و زمان ارائه نوشته می‌شود، ممکن است در مکان‌ها، سازمان‌ها و جاهای مختلف متفاوت باشد. در ایالات متحده آمریکا استفاده از فرمت mm/dd/yyyy متداول است؛ این در حالی است که در انگلستان، از فرمت dd/mm/yyyy استفاده می‌شود. پایتون، از متدهای ()strftime و ()strptime برای مدیریت این موارد استفاده می‌کند.

()strftime پایتون – تبدیل شی datetime به رشته

()strftime تحت کلاس‌های datetime ،date و time تعریف شده است. متد یک رشته فرمت شده را از شی داده شده datetime ،date یا time را ساخته است.

مثال ۱۵: فرمت کردن تاریخ با استفاده از ()strftime

from datetime import datetime

# current date and time
now = datetime.now()

t = now.strftime("%H:%M:%S")
print("time:", t)

s1 = now.strftime("%m/%d/%Y, %H:%M:%S")
# mm/dd/YY H:M:S format
print("s1:", s1)

s2 = now.strftime("%d/%m/%Y, %H:%M:%S")
# dd/mm/YY H:M:S format
print("s2:", s2)

با اجرای قطعه کد بالا، خروجی به صورت زیر خواهد بود:

time: 04:34:52
s1: 12/26/2018, 04:34:52
s2: 26/12/2018, 04:34:52

در اینجا، H ،%d ، %m، %Y% و دیگر موارد، کدهای فرمت هستند. متد ()strftime یک یا تعداد بیشتری کد فرمت را دریافت کرده و یک رشته قالب‌بندی شده بر اساس آن را باز می‌گرداند. در برنامه بالا، s1 ،t و s2 رشته‌ها هستند.

  • %Y – سال [0001,…, 2018, 2019,…, 9999]
  • %m – ماه [01, 02, …, 11, 12]
  • %d – روز [01, 02, …, 30, 31]
  • %H – ساعت [00, 01, …, 22, 23]
  • %M – ماه [00, 01, …, 58, 59]
  • %S – ثانیه [00, 01, …, 58, 59]

()strptime پایتون – تبدیل رشته به datetime

متد ()strptime یک شی datetime را از رشته داده شده می‌سازد (که تاریخ و ساعت را نمایش می‌دهد).

مثال ۱۶: ()strptime

from datetime import datetime

date_string = "21 June, 2018"
print("date_string =", date_string)

date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)

خروجی حاصل از اجرای برنامه بالا، به صورت زیر خواهد بود.

date_string = 21 June, 2018
date_object = 2018-06-21 00:00:00

متد ()strptime دو آرگومان زیر را دریافت می‌کند:

  • رشته‌ای که ارائه دهنده تاریخ و زمان است.
  • کد قالب معادل با آرگومان اول

کدهای قالب B ،%d% و %Y، به ترتیب برای month ،day (نام کامل) و سال مورد استفاده قرار می‌گیرند.

مدیریت زمان در پایتون

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

from datetime import datetime
import pytz

local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))


tz_NY = pytz.timezone('America/New_York') 
datetime_NY = datetime.now(tz_NY)
print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S"))

tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.now(tz_London)
print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))

پس از اجرای برنامه، خروجی به صورت زیر خواهد بود.

Local time: 2018-12-20 13:10:44.260462
America/New_York time: 2018-12-20 13:10:44.260462
Europe/London time: 2018-12-20 13:10:44.260462

در قطعه کد بالا، datetime_NY و datetime_London اشیای datetime و حاوی تاریخ کنونی و زمان برای منطقه زمانی مربوط به آن‌ها هستند.

اگر این مطلب برای شما مفید بوده است، آموزش‌ها و مطالب زیر نیز به شما پیشنهاد می‌شوند:

بر اساس رای ۵ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.

2 نظر در “ماژول datetime در پایتون | به زبان ساده

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد.

مشاهده بیشتر