Skip to content

Commit 91e9ce7

Browse files
author
Saeid Darvish
committed
l25: start datetime.timedelta
1 parent 006ae11 commit 91e9ce7

1 file changed

Lines changed: 63 additions & 51 deletions

File tree

lessons/l25.rst

Lines changed: 63 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
ماژول datetime
3838
~~~~~~~~~~~~~~~~~~~~~~~~~~~
3939

40-
این ماژول [`اسناد پایتون <https://docs.python.org/3/library/datetime.html>`__] از کتابخانه استاندارد زبان برنامه‌نویسی پایتون چند نوع یا کلاس برای کار با زمان (ساعت و تاریخ) را در اختیار برنامه‌نویس قرا می‌دهد:
40+
این ماژول [`اسناد پایتون <https://docs.python.org/3/library/datetime.html>`__] از کتابخانه استاندارد زبان برنامه‌نویسی پایتون چند نوع یا کلاس برای کار با زمان (ساعت و تاریخ) را در اختیار برنامه‌نویس قرار می‌دهد:
4141

4242
* **کلاس** ``date``: مناسب برای ایجاد شی تاریخ در پایتون می‌باشد که اشیا آن هیچ آگاهی نسبت به ساعت و منطقه زمانی (Time zone) [`ویکی‌پدیا <https://en.wikipedia.org/wiki/Time_zone>`__] نخواهند داشت و تنها مربوط به روزی خاص بر اساس گاه‌شماری میلادی (Gregorian calendar) [`ویکی‌پدیا <https://en.wikipedia.org/wiki/Gregorian_calendar>`__] می‌باشند.
4343

@@ -52,6 +52,11 @@
5252
در زبان برنامه‌نویسی پایتون اشیای مرتبط با زمان براساس توانایی آگاهی آن‌ها از منطقه زمانی (Time zone) به دو دسته **«آگاه» (aware)** و **«ساده» (naive)** تقسیم‌بندی می‌شوند. بر همین اساس اشیای کلاس ``date`` از نوع naive و اشیای دو کلاس ``time`` و ``datetime`` می‌توانند برحسب شرایط aware یا naive باشند.
5353

5454

55+
کلاس ``datetime.timedelta``
56+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
57+
58+
59+
5560
کلاس ``datetime.date``
5661
~~~~~~~~~~~~~~~~~~~~~~~~~~~
5762

@@ -60,36 +65,46 @@
6065
ایجاد شی تاریخ
6166
------------------
6267

63-
**۱- با استفاده از نمونه‌سازی**::
68+
به پنج شیوه زیر می‌توان یک شی تاریخ از نوع ``datetime.date`` ایجاد کرد:
6469

65-
>>> import datetime
70+
::
6671

67-
>>> date = datetime.date(2021, 4, 7)
72+
>>> import datetime
6873

74+
>>> # Wednesday, April 7, 2021
6975

70-
یا ::
76+
>>> d = datetime.date(2021, 4, 7)
77+
>>> d = datetime.date.fromisoformat('2021-04-07') # Python 3.7
78+
>>> d = datetime.date.fromordinal(737887)
79+
>>> d = datetime.date.fromtimestamp(1617737400)
80+
>>> d = datetime.date.fromisocalendar(2021, 14, 3) # Python 3.8
7181

82+
>>> d
83+
datetime.date(2021, 4, 7)
84+
>>> type(d)
85+
<class 'datetime.date'>
7286

73-
>>> import datetime
87+
>>> d.year
88+
2021
89+
>>> d.month
90+
4
91+
>>> d.day
92+
7
7493

75-
>>> date = datetime.date(year=2021, month=4, day=7)
7694

77-
که::
7895

79-
>>> date
80-
datetime.date(2021, 4, 7)
96+
**۱- با استفاده از نمونه‌سازی**::
97+
98+
>>> import datetime
99+
>>> d = datetime.date(2021, 4, 7)
81100

82-
>>> type(date)
83-
<class 'datetime.date'>
84101

85102
::
86103

87-
>>> date.year
88-
2021
89-
>>> date.month
90-
4
91-
>>> date.day
92-
7
104+
105+
>>> import datetime
106+
>>> d = datetime.date(year=2021, month=4, day=7)
107+
93108

94109
برای نمونه‌سازی از کلاس ``datetime.date`` می‌بایست سه Instance attribute آن را مقداردهی نماییم. این سه attribute عبارتند از:
95110

@@ -115,74 +130,71 @@
115130
>>> 1 <= date.day <= 31
116131
True
117132

118-
باید توجه داشت که مقدار این سه attribute پس از نمونه‌سازی قابل تغییر نخواهد بود و به اصطلاح read-only هستند::
133+
باید توجه داشت که مقدار این سه attribute پس از نمونه‌سازی قابل تغییر نخواهد بود و به اصطلاح read-only هستند::
119134

120135
>>> date.year = 2022
121136
Traceback (most recent call last):
122137
File "<stdin>", line 1, in <module>
123138
AttributeError: attribute 'year' of 'datetime.date' objects is not writable
124139

125-
**۲- با استفاده از کلاس متد** ``fromisoformat`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.date.fromisoformat>`__] از کلاس ``datetime.date`` (البته از نسخه 3.7 پایتون به بعد)، در تعریف این متد یک پارامتر از نوع ``str`` قرار داده شده است که یک تاریخ را براساس قالب استاندارد ISO 8601 [`ویکی‌پدیا <https://en.wikipedia.org/wiki/ISO_8601>`__] دریافت و یک شی معادل از کلاس ``datetime.date`` را برمی‌گرداند. این قالب برابر ``YYYY-MM-DD`` می‌باشد که از سمت چپ معرف چهار رقم سال، یک خط تیره، دو رقم ماه، یک خط تیره و دو رقم روز ماه می‌باشد؛ همانند: ``07-04-2020``::
140+
|
126141
127-
>>> import datetime
142+
**۲- با استفاده از کلاس متد** ``fromisoformat`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.date.fromisoformat>`__] از کلاس ``datetime.date`` (البته از نسخه 3.7 پایتون به بعد)، در تعریف این متد یک پارامتر از نوع ``str`` قرار داده شده است که در واقع این متد یک تاریخ را براساس قالب استاندارد ISO 8601 [`ویکی‌پدیا <https://en.wikipedia.org/wiki/ISO_8601>`__] دریافت و یک شی معادل از کلاس ``datetime.date`` را برمی‌گرداند. این قالب برابر ``YYYY-MM-DD`` می‌باشد که از سمت چپ معرف چهار رقم سال، یک خط تیره، دو رقم ماه، یک خط تیره و دو رقم روز ماه می‌باشد؛ همانند: ``07-04-2020``::
128143

144+
>>> import datetime
129145
>>> d = datetime.date.fromisoformat('2021-04-07')
130146

131-
یا::
147+
::
132148

133149
>>> from datetime import date
134-
135150
>>> d = date.fromisoformat('2021-04-07')
136151

137-
که::
152+
|
153+
154+
**۳- با استفاده از کلاس متد** ``fromordinal`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.date.fromordinal>`__] از کلاس ``datetime.date``، در تعریف این متد یک پارامتر از نوع ``int`` قرار داده شده است که در واقع این متد معادل یک proleptic Gregorian ordinal [`ویکی‌پدیا <https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar>`__] یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.date`` را برمی‌گرداند. این مقدار برابر شمارش تعداد روزها از تاریخ یکم ژانویه سال یک میلادی تا تاریخ مورد نظر می‌باشد::
138155

139-
>>> d
140-
datetime.date(2021, 4, 7)
141156

142-
>>> type(d)
143-
<class 'datetime.date'>
157+
>>> import datetime
158+
>>> d = datetime.date.fromordinal(737887)
144159

145160
::
146161

147-
>>> d.year
148-
2021
149-
>>> d.month
150-
4
151-
>>> d.day
152-
7
162+
>>> from datetime import date
163+
>>> d = date.fromordinal(737887)
164+
153165

154-
**۳- با استفاده از کلاس متد** ``fromordinal`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.date.fromordinal>`__] از کلاس ``datetime.date``، در تعریف این متد یک پارامتر از نوع ``int`` قرار داده شده است که معادل یک proleptic Gregorian ordinal [`ویکی‌پدیا <https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar>`__] را دریافت و یک شی معادل از کلاس ``datetime.date`` را برمی‌گرداند. این مقدار برابر شمارش تعداد روزها از تاریخ یکم ژانویه سال یک میلادی تا تاریخ مورد نظر می‌باشد::
155166

167+
|
156168
157-
>>> import datetime
169+
**۴- با استفاده از کلاس متد** ``fromtimestamp`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.date.fromtimestamp>`__] از کلاس ``datetime.date``، در تعریف این متد یک پارامتر از نوع ``int`` قرار داده شده است که در واقع این متد معادل POSIX timestamp [`ویکی‌پدیا <https://en.wikipedia.org/wiki/Unix_time>`__] یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.date`` را برمی‌گرداند. این مقدار برابر شمارش تعداد ثانیه‌ها به منطقه زمانی UTC از ساعت ۰۰:۰۰:۰۰ یکم ژانویه سال ۱۹۷۰ میلادی تا تاریخ مورد نظر می‌باشد::
158170

159-
>>> d = datetime.date.fromordinal(737887)
160171

161-
یا::
172+
>>> import datetime
173+
>>> d = datetime.date.fromtimestamp(1617737400)
174+
175+
::
162176

163177
>>> from datetime import date
178+
>>> d = date.fromtimestamp(1617737400)
164179

165-
>>> d = date.fromordinal(737887)
180+
توجه داشته باشید ممکن است این متد از سال ۲۰۳۸ باعث بروز خطا گردد. چرا که این متد از تابع localtime در زبان برنامه‌نویسی C استفاده می‌کند که در آن سال مقدار timestamp از نوع signed 32-bit integer در این زبان، Overflow خواهد داشت! [`ویکی‌پدیا: Year 2038 problem <https://en.wikipedia.org/wiki/Year_2038_problem>`__]
166181

167-
که::
168182

169-
>>> d
170-
datetime.date(2021, 4, 7)
183+
|
171184
172-
>>> type(d)
173-
<class 'datetime.date'>
185+
**۵- با استفاده از کلاس متد** ``fromisocalendar`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.date.fromisocalendar>`__] از کلاس ``datetime.date`` (البته از نسخه 3.8 پایتون به بعد)، در تعریف این متد سه پارامتر از نوع ``int`` قرار داده شده است که از سمت چپ به ترتیب معرف سال، شماره هفته در سال و شماره روز از هفته مورد نظر می‌باشند. در واقع این متد معادل ISO calendar [`ویکی‌پدیا <https://en.wikipedia.org/wiki/ISO_week_date>`__] یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.date`` را برمی‌گرداند. در این استاندارد، یک سال شامل ۵۲ هفته می‌باشد که روزهای هر هفته نیز از روز دوشنبه (Monday) با شماره یک محاسبه می‌گردد::
174186

175-
::
187+
date.fromisocalendar(year, week, day)
176188

177-
>>> d.year
178-
2021
179-
>>> d.month
180-
4
181-
>>> d.day
182-
7
189+
::
183190

191+
>>> import datetime
192+
>>> d = datetime.date.fromisocalendar(2021, 14, 3) # Wednesday, April 7, 2021
184193

194+
::
185195

196+
>>> from datetime import date
197+
>>> d = date.fromisocalendar(2021, 14, 3) # Wednesday, April 7, 2021
186198

187199

188200
کلاس ``datetime.time``

0 commit comments

Comments
 (0)