mirror of
https://github.com/Asabeneh/30-Days-Of-Python.git
synced 2026-06-06 21:09:15 +08:00
211 lines
8.5 KiB
Markdown
211 lines
8.5 KiB
Markdown
<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)
|
||
|
||

|
||
- [📘 روز ۱۶](#-روز-۱۶)
|
||
- [ *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_ که برای قالببندی زمان استفاده میکنیم، آورده شده است. مثالی از تمام فرمتهای این ماژول.
|
||
|
||

|
||
|
||
### تبدیل رشته به زمان با استفاده از *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)
|