۳۰ روز پایتون: روز ۱۶ - تاریخ و زمان در پایتون

Twitter Follow نویسنده: Asabeneh Yetayeh
ویرایش دوم: جولای، ۲۰۲۱
[>> روز ۱۷](../17_exception_handling.md) | [<< روز ۱۵](../15_python_type_errors.md) ![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) - [📘 روز ۱۶](#-روز-۱۶) - [ *datetime* پایتون](#-datetime-پایتون) - [دریافت اطلاعات *datetime*](#دریافت-اطلاعات-datetime) - [قالب‌بندی خروجی تاریخ با استفاده از *strftime*](#قالب‌بندی-خروجی-تاریخ-با-استفاده-از-strftime) - [تبدیل رشته به زمان با استفاده از *strptime*](#تبدیل-رشته-به-زمان-با-استفاده-از-strptime) - [استفاده از *date* از ماژول *datetime*](#استفاده-از-date-از-ماژول-datetime) - [اشیاء Time برای نمایش زمان](#اشیاء-time-برای-نمایش-زمان) - [محاسبه تفاوت بین دو نقطه زمانی با استفاده از](#محاسبه-تفاوت-بین-دو-نقطه-زمانی-با-استفاده-از) - [محاسبه تفاوت بین دو نقطه زمانی با استفاده از *timedelta*](#محاسبه-تفاوت-بین-دو-نقطه-زمانی-با-استفاده-از-timedelta) - [💻 تمرین‌ها: روز ۱۶](#-تمرین‌ها-روز-۱۶) # 📘 روز ۱۶ ## *datetime* پایتون پایتون ماژول _datetime_ را برای کار با تاریخ و زمان دارد. ```py import datetime print(dir(datetime)) ['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo'] ``` با دستورات داخلی dir یا help می‌توان توابع موجود در یک ماژول خاص را شناخت. همانطور که می‌بینید، در ماژول datetime توابع زیادی وجود دارد، اما ما بر روی _date_، _datetime_، _time_ و _timedelta_ تمرکز خواهیم کرد. بیایید آنها را یک به یک ببینیم. ### دریافت اطلاعات *datetime* ```py from datetime import datetime now = datetime.now() print(now) # 2021-07-08 07:34:46.549883 day = now.day # 8 month = now.month # 7 year = now.year # 2021 hour = now.hour # 7 minute = now.minute # 38 second = now.second timestamp = now.timestamp() print(day, month, year, hour, minute) print('timestamp', timestamp) print(f'{day}/{month}/{year}, {hour}:{minute}') # 8/7/2021, 7:38 ``` Timestamp یا Unix timestamp تعداد ثانیه‌های سپری شده از اول ژانویه ۱۹۷۰ به وقت UTC است. ### قالب‌بندی خروجی تاریخ با استفاده از *strftime* ```py from datetime import datetime new_year = datetime(2020, 1, 1) print(new_year) # 2020-01-01 00:00:00 day = new_year.day month = new_year.month year = new_year.year hour = new_year.hour minute = new_year.minute second = new_year.second print(day, month, year, hour, minute) #1 1 2020 0 0 print(f'{day}/{month}/{year}, {hour}:{minute}') # 1/1/2020, 0:0 ``` قالب‌بندی تاریخ و زمان با استفاده از متد *strftime* انجام می‌شود و مستندات آن را می‌توانید [اینجا](https://strftime.org/) پیدا کنید. ```py from datetime import datetime # تاریخ و زمان فعلی now = datetime.now() t = now.strftime("%H:%M:%S") print("time:", t) time_one = now.strftime("%m/%d/%Y, %H:%M:%S") # فرمت mm/dd/YY H:M:S print("time one:", time_one) time_two = now.strftime("%d/%m/%Y, %H:%M:%S") # فرمت dd/mm/YY H:M:S print("time two:", time_two) ``` ```sh time: 01:05:01 time one: 12/05/2019, 01:05:01 time two: 05/12/2019, 01:05:01 ``` در اینجا تمام نمادهای _strftime_ که برای قالب‌بندی زمان استفاده می‌کنیم، آورده شده است. مثالی از تمام فرمت‌های این ماژول. ![strftime](../images/strftime.png) ### تبدیل رشته به زمان با استفاده از *strptime* در اینجا [مستنداتی](https://www.programiz.com/python-programming/datetime/strptimet) وجود دارد که به درک فرمت کمک می‌کند. ```py from datetime import datetime date_string = "5 December, 2019" print("date_string =", date_string) date_object = datetime.strptime(date_string, "%d %B, %Y") print("date_object =", date_object) ``` ```sh date_string = 5 December, 2019 date_object = 2019-12-05 00:00:00 ``` ### استفاده از *date* از ماژول *datetime* ```py from datetime import date d = date(2020, 1, 1) print(d) print('Current date:', d.today()) # 2019-12-05 # شیء date از تاریخ امروز today = date.today() print("Current year:", today.year) # 2019 print("Current month:", today.month) # 12 print("Current day:", today.day) # 5 ``` ### اشیاء Time برای نمایش زمان ```py from datetime import time # time(hour = 0, minute = 0, second = 0) a = time() print("a =", a) # time(hour, minute and second) b = time(10, 30, 50) print("b =", b) # time(hour, minute and second) c = time(hour=10, minute=30, second=50) print("c =", c) # time(hour, minute, second, microsecond) d = time(10, 30, 50, 200555) print("d =", d) ``` خروجی a = 00:00:00 b = 10:30:50 c = 10:30:50 d = 10:30:50.200555 ### محاسبه تفاوت بین دو نقطه زمانی با استفاده از ```py today = date(year=2019, month=12, day=5) new_year = date(year=2020, month=1, day=1) time_left_for_newyear = new_year - today # Time left for new year: 27 days, 0:00:00 print('Time left for new year: ', time_left_for_newyear) t1 = datetime(year = 2019, month = 12, day = 5, hour = 0, minute = 59, second = 0) t2 = datetime(year = 2020, month = 1, day = 1, hour = 0, minute = 0, second = 0) diff = t2 - t1 print('Time left for new year:', diff) # Time left for new year: 26 days, 23: 01: 00 ``` ### محاسبه تفاوت بین دو نقطه زمانی با استفاده از *timedelta* ```py from datetime import timedelta t1 = timedelta(weeks=12, days=10, hours=4, seconds=20) t2 = timedelta(days=7, hours=5, minutes=3, seconds=30) t3 = t1 - t2 print("t3 =", t3) ``` ```sh date_string = 5 December, 2019 date_object = 2019-12-05 00:00:00 t3 = 86 days, 22:56:50 ``` 🌕 شما فوق‌العاده هستید. شما ۱۶ قدم در مسیر خود به سوی بزرگی پیش رفته‌اید. اکنون برای مغز و عضلات خود چند تمرین انجام دهید. ## 💻 تمرین‌ها: روز ۱۶ ۱. روز، ماه، سال، ساعت، دقیقه و timestamp فعلی را از ماژول datetime بگیرید. ۲. تاریخ فعلی را با استفاده از این فرمت قالب‌بندی کنید: "%m/%d/%Y, %H:%M:%S") ۳. امروز ۵ دسامبر ۲۰۱۹ است. این رشته زمانی را به زمان تبدیل کنید. ۴. تفاوت زمانی بین حال و سال نو را محاسبه کنید. ۵. تفاوت زمانی بین ۱ ژانویه ۱۹۷۰ و حال را محاسبه کنید. ۶. فکر کنید، از ماژول datetime برای چه کارهایی می‌توانید استفاده کنید؟ مثال‌ها: - تحلیل سری‌های زمانی - برای گرفتن timestamp از هر فعالیتی در یک برنامه - افزودن پست‌ها در یک وبلاگ 🎉 تبریک می‌گویم! 🎉 [>> روز ۱۷](../17_exception_handling.md) | [<< روز ۱۵](../15_python_type_errors.md)