ماژول datetime در پایتون | به زبان ساده
در این مطلب ماژول datetime در پایتون مورد بررسی قرار گرفته است و چگونگی دستکاری دادههای تاریخ و زمان در زبان برنامهنویسی پایتون با کمک بیان مثالهای متعدد، تشریح شده است.
ماژول datetime در پایتون
پایتون دارای یک ماژول با عنوان datetime برای کار با دادهها و زمان است که از آن برای دستکاری دادههای تاریخ و زمان استفاده میشود.
در ادامه، چند برنامه ساده مرتبط با تاریخ و زمان، پیش از از عمیقتر شدن در بحث و پرداختن به ماژول datetime در پایتون ارائه شده است.
مثال ۱: دریافت تاریخ و زمان کنونی
1import datetime
2
3datetime_object = datetime.datetime.now()
4print(datetime_object)
پس از اجرای برنامه بالا، خروجی به صورت زیر است.
2018-12-19 09:26:03.478039
در اینجا، ماژول datetime با استفاده از دستور import datetime بهبود داده شده است. یکی از کلاسهای تعریف شده در ماژول datetime، کلاس datetime است. سپس، متد ()now برای ساخت یک شی datetime که حاوی تاریخ و زمان کنونی است مورد استفاده قرار گرفته است.
مثال ۲: دریافت تاریخ کنونی
1import datetime
2
3date_object = datetime.date.today()
4print(date_object)
هنگامی که برنامه اجرا شد، خروجی به صورت زیر خواهد بود.
2018-12-19
در این برنامه، متد ()today در کلاس date تعریف شده است تا یک شی date حاوی تاریخ محلی کنونی را دریافت کند.
درون ماژول datetime در پایتون چیست؟
میتوان از تابع ()dir برای دریافت لیست حاوی همه خصیصههای یک مدل استفاده کرد.
1import datetime
2
3print(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 برای نمایش تاریخ
1import datetime
2
3d = datetime.date(2019, 4, 13)
4print(d)
پس از اجرای برنامه، خروجی به صورت زیر خواهد بود.
12019-04-13
در مثال بالا، ()date سازنده کلاس date است. سازنده سه آرگومان سال، ماه و روز را دریافت میکند. متغیر a یک شی date است. کلاس date را تنها میتوان از ماژول datetime «وارد» (ایمپورت | Import) کرد. در ادامه، قطعه کد مربوط به چگونگی انجام این کار ارائه شده است.
1from datetime import date
2
3a = date(2019, 4, 13)
4print(a)
مثال ۴: دریافت تاریخ کنونی
میتوان شی date که حاوی تاریخ کنونی است را با استفاده از یک «متد کلاس» (Classmethod) با عنوان ()today ساخت. در ادامه، قطعه کد مربوط به این مورد ارائه شده است.
1from datetime import date
2
3today = date.today()
4
5print("Current date =", today)
مثال ۵: دریافت date از timestamp
میتوان شی date را از timestamp نیز ساخت. یک ساعت «ساعت یونیکس» (Unix Timestamp) تعداد ثانیههای بین یک تاریخ مشخص و ۱ ژانویه ۱۹۷۰ است. میتوان timestamp را با استفاده از متد ()fromtimestamp به تاریخ تبدیل کرد.
1from datetime import date
2
3timestamp = date.fromtimestamp(1326244364)
4print("Date =", timestamp)
پس از اجرای کد بالا، خروجی به صورت زیر خواهد بود.
1Date = 2012-01-11
مثال ۶: چاپ سال، ماه و روز
در این بخش از مطلب ماژول datetime در پایتون به چگونگی چاپ سال، ماه و روز در پایتون پرداخته شده است. میتوان سال، ماه و روز هفته و دیگر موارد را با استفاده از شی date به سادگی دریافت کرد. در ادامه، قطعه کد مربوط به این کار آورده شده است.
1from datetime import date
2
3# date object of today's date
4today = date.today()
5
6print("Current year:", today.year)
7print("Current month:", today.month)
8print("Current day:", today.day)
datetime.time
یک شی time از کلاس time که زمان محلی را نشان میدهد، نمونهسازی شده است.
مثال ۷: شی زمان برای نمایش زمان
1from datetime import time
2
3# time(hour = 0, minute = 0, second = 0)
4a = time()
5print("a =", a)
6
7# time(hour, minute and second)
8b = time(11, 34, 56)
9print("b =", b)
10
11# time(hour, minute and second)
12c = time(hour = 11, minute = 34, second = 56)
13print("c =", c)
14
15# time(hour, minute, second, microsecond)
16d = time(11, 34, 56, 234566)
17print("d =", d)
با اجرای قطعه کد بالا، خروجی به صورت زیر خواهد بود.
1a = 00:00:00
2b = 11:34:56
3c = 11:34:56
4d = 11:34:56.234566
مثال ۸: چاپ ساعت، دقیقه، ثانیه و میکروثانیه
هنگامی که شی زمان ساخته شد، میتوان به سادگی خصیصههای آن مانند minute، hour و دیگر موارد را ویرایش کرد.
1from datetime import time
2
3a = time(11, 34, 56)
4
5print("hour =", a.hour)
6print("minute =", a.minute)
7print("second =", a.second)
8print("microsecond =", a.microsecond)
با اجرای مثال بالا، خروجی به صورت زیر خواهد بود:
hour = 11 minute = 34 second = 56 microsecond = 0
توجه به این نکته لازم است که آرگومان microsecond در قطعه کد بالا پاس داده نشده است. بنابراین، مقادیر پیشفرض ۰ چاپ شده است.
datetime.datetime
ماژول datetime دارای یک کلاس با نام dateclass است که حاوی اطلاعاتی پیرامون اشیای date و time است.
مثال ۹: شی datetime پایتون
1from datetime import datetime
2
3#datetime(year, month, day)
4a = datetime(2018, 11, 28)
5print(a)
6
7# datetime(year, month, day, hour, minute, second, microsecond)
8b = datetime(2017, 11, 28, 23, 55, 59, 342380)
9print(b)
پس از اجرای کد بالا، خروجی به صورت زیر خواهد بود:
12018-11-28 00:00:00
22017-11-28 23:55:59.342380
سه آرگومان اول month ،year و day در سازنده ()datetime اجباری هستند.
مثال ۱۰: چاپ سال، ماه، ساعت، دقیقه و timestamp
1from datetime import datetime
2
3a = datetime(2017, 11, 28, 23, 55, 59, 342380)
4print("year =", a.year)
5print("month =", a.month)
6print("hour =", a.hour)
7print("minute =", a.minute)
8print("timestamp =", a.timestamp())
پس از اجرای برنامه، خروجی به صورت زیر خواهد بود:
year = 2017 month = 11 day = 28 hour = 23 minute = 55 timestamp = 1511913359.34238
datetime.timedelta
شی timedelta تفاوت بین دو تاریخ یا زمان را نشان میدهد.
مثال ۱۱: تفاوت بین دو تاریخ و ساعت
1from datetime import datetime, date
2
3t1 = date(year = 2018, month = 7, day = 12)
4t2 = date(year = 2017, month = 12, day = 23)
5t3 = t1 - t2
6print("t3 =", t3)
7
8t4 = datetime(year = 2018, month = 7, day = 12, hour = 7, minute = 9, second = 33)
9t5 = datetime(year = 2019, month = 6, day = 10, hour = 5, minute = 55, second = 13)
10t6 = t4 - t5
11print("t6 =", t6)
12
13print("type of t3 =", type(t3))
14print("type of t6 =", type(t6))
هنگامی که برنامه اجرا شد، خروجی به صورت زیر خواهد بود.
1t3 = 201 days, 0:00:00
2t6 = -333 days, 1:14:20
3type of t3 = <class 'datetime.timedelta'>
4type of t6 = <class 'datetime.timedelta'>
توجه به این نکته لازم است که t3 و t6 از نوع <class 'datetime.timedelta'> هستند.
مثال ۱۲: تفاوت بین دو شی timedelta
1from datetime import timedelta
2
3t1 = timedelta(weeks = 2, days = 5, hours = 1, seconds = 33)
4t2 = timedelta(days = 4, hours = 11, minutes = 4, seconds = 54)
5t3 = t1 - t2
6
7print("t3 =", t3)
با اجرای قطعه کد بالا، خروجی به صورت زیر خواهد بود.
t3 = 14 days, 13:55:39
در اینجا، دو شی timedelta با عنوان t1 و t2 ساخت شده و تفاوت آنها روی صفحه چاپ شده است.
مثال ۱۳: چاپ کردن شی timedelta منفی
1from datetime import timedelta
2
3t1 = timedelta(seconds = 33)
4t2 = timedelta(seconds = 54)
5t3 = t1 - t2
6
7print("t3 =", t3)
8print("t3 =", abs(t3))
پس از اجرای برنامه بالا، خروجی به صورت زیر خواهد بود.
1t3 = -1 day, 23:59:39
2t3 = 0:00:21
مثال ۱۴: مدت زمان به ثانیه
میتوان کل مدت ثانیه را با استفاده از شی timedelta و متد ()total_seconds دریافت کرد.
1from datetime import timedelta
2
3t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423)
4print("total seconds =", t.total_seconds())
خروجی حاصل از اجرای قطعه کد بالا، به صورت زیر است.
1total 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
1from datetime import datetime
2
3# current date and time
4now = datetime.now()
5
6t = now.strftime("%H:%M:%S")
7print("time:", t)
8
9s1 = now.strftime("%m/%d/%Y, %H:%M:%S")
10# mm/dd/YY H:M:S format
11print("s1:", s1)
12
13s2 = now.strftime("%d/%m/%Y, %H:%M:%S")
14# dd/mm/YY H:M:S format
15print("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
1from datetime import datetime
2
3date_string = "21 June, 2018"
4print("date_string =", date_string)
5
6date_object = datetime.strptime(date_string, "%d %B, %Y")
7print("date_object =", date_object)
خروجی حاصل از اجرای برنامه بالا، به صورت زیر خواهد بود.
date_string = 21 June, 2018 date_object = 2018-06-21 00:00:00
متد ()strptime دو آرگومان زیر را دریافت میکند:
- رشتهای که ارائه دهنده تاریخ و زمان است.
- کد قالب معادل با آرگومان اول
کدهای قالب B ،%d% و %Y، به ترتیب برای month ،day (نام کامل) و سال مورد استفاده قرار میگیرند.
مدیریت زمان در پایتون
فرض میشود که فرد در حال کار روی پروژهای است و نیاز به نمایش تاریخ و زمان بر اساس منطقه زمانی دارد.
به جای آنکه فرد خودش منطقه زمانی را مدیریت کند، میتواند از یک ماژول شخص ثالث pytZ استفاده کند.
1from datetime import datetime
2import pytz
3
4local = datetime.now()
5print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))
6
7
8tz_NY = pytz.timezone('America/New_York')
9datetime_NY = datetime.now(tz_NY)
10print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S"))
11
12tz_London = pytz.timezone('Europe/London')
13datetime_London = datetime.now(tz_London)
14print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))
پس از اجرای برنامه، خروجی به صورت زیر خواهد بود.
1Local time: 2018-12-20 13:10:44.260462
2America/New_York time: 2018-12-20 13:10:44.260462
3Europe/London time: 2018-12-20 13:10:44.260462
در قطعه کد بالا، datetime_NY و datetime_London اشیای datetime و حاوی تاریخ کنونی و زمان برای منطقه زمانی مربوط به آنها هستند.
مرسی از زحمت ترجمه ی مقالات خانوم حصارکی
خیلی عالی بود خیلی عالی . واقعا عالی