|
37 | 37 | ماژول datetime |
38 | 38 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
39 | 39 |
|
40 | | -این ماژول [`اسناد پایتون <https://docs.python.org/3/library/datetime.html>`__] از کتابخانه استاندارد زبان برنامهنویسی پایتون چند نوع یا کلاس برای کار با زمان (ساعت و تاریخ) را در اختیار برنامهنویس قرا میدهد: |
| 40 | +این ماژول [`اسناد پایتون <https://docs.python.org/3/library/datetime.html>`__] از کتابخانه استاندارد زبان برنامهنویسی پایتون چند نوع یا کلاس برای کار با زمان (ساعت و تاریخ) را در اختیار برنامهنویس قرار میدهد: |
41 | 41 |
|
42 | 42 | * **کلاس** ``date``: مناسب برای ایجاد شی تاریخ در پایتون میباشد که اشیا آن هیچ آگاهی نسبت به ساعت و منطقه زمانی (Time zone) [`ویکیپدیا <https://en.wikipedia.org/wiki/Time_zone>`__] نخواهند داشت و تنها مربوط به روزی خاص بر اساس گاهشماری میلادی (Gregorian calendar) [`ویکیپدیا <https://en.wikipedia.org/wiki/Gregorian_calendar>`__] میباشند. |
43 | 43 |
|
|
52 | 52 | در زبان برنامهنویسی پایتون اشیای مرتبط با زمان براساس توانایی آگاهی آنها از منطقه زمانی (Time zone) به دو دسته **«آگاه» (aware)** و **«ساده» (naive)** تقسیمبندی میشوند. بر همین اساس اشیای کلاس ``date`` از نوع naive و اشیای دو کلاس ``time`` و ``datetime`` میتوانند برحسب شرایط aware یا naive باشند. |
53 | 53 |
|
54 | 54 |
|
| 55 | +کلاس ``datetime.timedelta`` |
| 56 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 57 | + |
| 58 | + |
| 59 | + |
55 | 60 | کلاس ``datetime.date`` |
56 | 61 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
57 | 62 |
|
|
60 | 65 | ایجاد شی تاریخ |
61 | 66 | ------------------ |
62 | 67 |
|
63 | | -**۱- با استفاده از نمونهسازی**:: |
| 68 | +به پنج شیوه زیر میتوان یک شی تاریخ از نوع ``datetime.date`` ایجاد کرد: |
64 | 69 |
|
65 | | - >>> import datetime |
| 70 | +:: |
66 | 71 |
|
67 | | - >>> date = datetime.date(2021, 4, 7) |
| 72 | + >>> import datetime |
68 | 73 |
|
| 74 | + >>> # Wednesday, April 7, 2021 |
69 | 75 |
|
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 |
71 | 81 |
|
| 82 | + >>> d |
| 83 | + datetime.date(2021, 4, 7) |
| 84 | + >>> type(d) |
| 85 | + <class 'datetime.date'> |
72 | 86 |
|
73 | | - >>> import datetime |
| 87 | + >>> d.year |
| 88 | + 2021 |
| 89 | + >>> d.month |
| 90 | + 4 |
| 91 | + >>> d.day |
| 92 | + 7 |
74 | 93 |
|
75 | | - >>> date = datetime.date(year=2021, month=4, day=7) |
76 | 94 |
|
77 | | -که:: |
78 | 95 |
|
79 | | - >>> date |
80 | | - datetime.date(2021, 4, 7) |
| 96 | +**۱- با استفاده از نمونهسازی**:: |
| 97 | + |
| 98 | + >>> import datetime |
| 99 | + >>> d = datetime.date(2021, 4, 7) |
81 | 100 |
|
82 | | - >>> type(date) |
83 | | - <class 'datetime.date'> |
84 | 101 |
|
85 | 102 | :: |
86 | 103 |
|
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 | + |
93 | 108 |
|
94 | 109 | برای نمونهسازی از کلاس ``datetime.date`` میبایست سه Instance attribute آن را مقداردهی نماییم. این سه attribute عبارتند از: |
95 | 110 |
|
|
115 | 130 | >>> 1 <= date.day <= 31 |
116 | 131 | True |
117 | 132 |
|
118 | | -باید توجه داشت که مقدار این سه attribute پس از نمونهسازی قابل تغییر نخواهد بود و به اصطلاح read-only هستند:: |
| 133 | + باید توجه داشت که مقدار این سه attribute پس از نمونهسازی قابل تغییر نخواهد بود و به اصطلاح read-only هستند:: |
119 | 134 |
|
120 | 135 | >>> date.year = 2022 |
121 | 136 | Traceback (most recent call last): |
122 | 137 | File "<stdin>", line 1, in <module> |
123 | 138 | AttributeError: attribute 'year' of 'datetime.date' objects is not writable |
124 | 139 |
|
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 | +| |
126 | 141 |
|
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``:: |
128 | 143 |
|
| 144 | + >>> import datetime |
129 | 145 | >>> d = datetime.date.fromisoformat('2021-04-07') |
130 | 146 |
|
131 | | -یا:: |
| 147 | +:: |
132 | 148 |
|
133 | 149 | >>> from datetime import date |
134 | | - |
135 | 150 | >>> d = date.fromisoformat('2021-04-07') |
136 | 151 |
|
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`` را برمیگرداند. این مقدار برابر شمارش تعداد روزها از تاریخ یکم ژانویه سال یک میلادی تا تاریخ مورد نظر میباشد:: |
138 | 155 |
|
139 | | - >>> d |
140 | | - datetime.date(2021, 4, 7) |
141 | 156 |
|
142 | | - >>> type(d) |
143 | | - <class 'datetime.date'> |
| 157 | + >>> import datetime |
| 158 | + >>> d = datetime.date.fromordinal(737887) |
144 | 159 |
|
145 | 160 | :: |
146 | 161 |
|
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 | + |
153 | 165 |
|
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`` را برمیگرداند. این مقدار برابر شمارش تعداد روزها از تاریخ یکم ژانویه سال یک میلادی تا تاریخ مورد نظر میباشد:: |
155 | 166 |
|
| 167 | +| |
156 | 168 |
|
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 از ساعت ۰۰:۰۰:۰۰ یکم ژانویه سال ۱۹۷۰ میلادی تا تاریخ مورد نظر میباشد:: |
158 | 170 |
|
159 | | - >>> d = datetime.date.fromordinal(737887) |
160 | 171 |
|
161 | | -یا:: |
| 172 | + >>> import datetime |
| 173 | + >>> d = datetime.date.fromtimestamp(1617737400) |
| 174 | + |
| 175 | +:: |
162 | 176 |
|
163 | 177 | >>> from datetime import date |
| 178 | + >>> d = date.fromtimestamp(1617737400) |
164 | 179 |
|
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>`__] |
166 | 181 |
|
167 | | -که:: |
168 | 182 |
|
169 | | - >>> d |
170 | | - datetime.date(2021, 4, 7) |
| 183 | +| |
171 | 184 |
|
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) با شماره یک محاسبه میگردد:: |
174 | 186 |
|
175 | | -:: |
| 187 | + date.fromisocalendar(year, week, day) |
176 | 188 |
|
177 | | - >>> d.year |
178 | | - 2021 |
179 | | - >>> d.month |
180 | | - 4 |
181 | | - >>> d.day |
182 | | - 7 |
| 189 | +:: |
183 | 190 |
|
| 191 | + >>> import datetime |
| 192 | + >>> d = datetime.date.fromisocalendar(2021, 14, 3) # Wednesday, April 7, 2021 |
184 | 193 |
|
| 194 | +:: |
185 | 195 |
|
| 196 | + >>> from datetime import date |
| 197 | + >>> d = date.fromisocalendar(2021, 14, 3) # Wednesday, April 7, 2021 |
186 | 198 |
|
187 | 199 |
|
188 | 200 | کلاس ``datetime.time`` |
|
0 commit comments