30-Days-Of-Python/Persain/16_python_datetime.md

211 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div align="center">
<h1> ۳۰ روز پایتون: روز ۱۶ - تاریخ و زمان در پایتون </h1>
<a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/">
<img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social">
</a>
<a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh">
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social">
</a>
<sub>نویسنده:
<a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br>
<small>ویرایش دوم: جولای، ۲۰۲۱</small>
</sub>
</div>
[<< روز ۱۷](./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: 18:21:40
time_one = now.strftime("%m/%d/%Y, %H:%M:%S")
# فرمت mm/dd/YY H:M:S
print("time one:", time_one) # time one: 06/28/2022, 18:21:40
time_two = now.strftime("%d/%m/%Y, %H:%M:%S")
# فرمت dd/mm/YY H:M:S
print("time two:", time_two) # time two: 28/06/2022, 18:21:40
```
```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/strptime) وجود دارد که به درک فرمت کمک می‌کند.
```py
from datetime import datetime
date_string = "5 December, 2019"
print("date_string =", date_string) # date_string = 5 December, 2019
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object) # date_object = 2019-12-05 00:00:00
```
```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) # 2020-01-01
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) # a = 00:00:00
# 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) # c = 10:30:50
# time(hour, minute, second, microsecond)
d = time(10, 30, 50, 200555)
print("d =", d) # d = 10:30:50.200555
```
خروجی
a = 00:00:00
b = 10:30:50
c = 10:30:50
d = 10:30:50.200555
### محاسبه تفاوت بین دو نقطه زمانی با استفاده از
```py
from datetime import date, datetime
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) # Time left for new year: 27 days, 0:00:00
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)