|
516 | 516 | datetime.date(2021, 4, 10) |
517 | 517 |
|
518 | 518 |
|
| 519 | +* **متد** ``(format)strftime`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.date.strftime>`__]: این متد بسیار پرکاربرد است و عملکرد آن به این صورت میباشد که یک قالب (format) را دریافت و معادل ``str`` از شی مورد نظر را بر اساس ساختار آن قالب برمیگردادند. ساختار قالب در اینجا با آنچه توسط استاندارد ISO 8601 مطرح شده است کمی متفاوت میباشد که در انتهای این درس مورد بررسی قرار خواهد گرفت. |
| 520 | + |
| 521 | + |
519 | 522 |
|
520 | 523 |
|
521 | 524 |
|
|
722 | 725 | >>> t.replace(tzinfo=tz_teh) |
723 | 726 | datetime.time(22, 22, 22, tzinfo=datetime.timezone(datetime.timedelta(seconds=16200), 'Asia/Tehran')) |
724 | 727 |
|
725 | | - باید توجه داشت که با تغییر منطقه زمانی یک شی ``datetime.time``، اطلاعات مربوط به ساعت، در آن تغییری نخواهند داشت. چرا که تغییر ساعت بر اساس منطقه زمانی میتواند منجر به تغییر تاریخ گردد و این شی هیچ اطلاعاتی از تاریخ ندارد. |
726 | | - |
| 728 | + باید توجه داشت که با تغییر منطقه زمانی یک شی ``datetime.time``، اطلاعات مربوط به ساعت، در آن تغییری نخواهند داشت. چرا که وظیفه این متد تنها جایگزینی مقادیر میباشد و با جایگزینی منطقه زمانی، تغییری در زمان ثبت شده ایجاد نمیگردد. |
727 | 729 |
|
728 | 730 |
|
729 | 731 | * **متد** ``isoformat`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.time.isoformat>`__]: معادل مقدار ساعت شی را در قالب استاندارد ISO 8601 برمیگرداند:: |
|
775 | 777 | 'Asia/Tehran' |
776 | 778 |
|
777 | 779 |
|
| 780 | +* **متد** ``(format)strftime`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.time.strftime>`__]: این متد بسیار پرکاربرد است و عملکرد آن به این صورت میباشد که یک قالب (format) را دریافت و معادل ``str`` از شی مورد نظر را بر اساس ساختار آن قالب برمیگردادند. ساختار قالب در اینجا با آنچه توسط استاندارد ISO 8601 مطرح شده است کمی متفاوت میباشد که در انتهای این درس مورد بررسی قرار خواهد گرفت. |
| 781 | + |
778 | 782 |
|
779 | 783 | naive / aware |
780 | 784 | ---------------------------- |
@@ -1045,6 +1049,202 @@ naive / aware |
1045 | 1049 | برخی از Instance methodهای یک شی ``datetime.datetime`` پایتون به شرح زیر هستند: |
1046 | 1050 |
|
1047 | 1051 |
|
| 1052 | +* **متد** ``date`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.date>`__]: بخش تاریخ از شی مورد نظر را در قالب یک شی ``datetime.date`` برمیگرداند:: |
| 1053 | + |
| 1054 | + >>> import datetime |
| 1055 | + >>> dt = datetime.datetime(2021, 4, 15, 12, 0, 0, tzinfo=datetime.timezone.utc) |
| 1056 | + >>> dt.date() |
| 1057 | + datetime.date(2021, 4, 15) |
| 1058 | + |
| 1059 | + |
| 1060 | +* **متد** ``time`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.time>`__]: بخش ساعت از شی مورد نظر را در قالب یک شی ``datetime.time``، بدون مقدار ``tzinfo`` برمیگرداند:: |
| 1061 | + |
| 1062 | + >>> import datetime |
| 1063 | + >>> dt = datetime.datetime(2021, 4, 15, 12, 0, 0, tzinfo=datetime.timezone.utc) |
| 1064 | + >>> dt.time() |
| 1065 | + datetime.time(12, 0) |
| 1066 | + |
| 1067 | + >>> print(dt.time().tzinfo) |
| 1068 | + None |
| 1069 | + |
| 1070 | + |
| 1071 | +* **متد** ``timetz`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.timetz>`__]: بخش ساعت از شی مورد نظر را در قالب یک شی ``datetime.time``، به همراه مقدار ``tzinfo`` برمیگرداند:: |
| 1072 | + |
| 1073 | + >>> import datetime |
| 1074 | + >>> dt = datetime.datetime(2021, 4, 15, 12, 0, 0, tzinfo=datetime.timezone.utc) |
| 1075 | + >>> dt.timetz() |
| 1076 | + datetime.time(12, 0, tzinfo=datetime.timezone.utc) |
| 1077 | + |
| 1078 | + >>> print(dt.timetz().tzinfo) |
| 1079 | + UTC |
| 1080 | + |
| 1081 | + |
| 1082 | + |
| 1083 | +* **متد** ``astimezone(tz=None)`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.astimezone>`__]: با استفاده از این متد میتوان منطقه زمانی شی مورد نظر را تغییر و به صورت یک شی جدید ``datetime.datetime`` دریافت کرد:: |
| 1084 | + |
| 1085 | + >>> import datetime |
| 1086 | + >>> dt = datetime.datetime(2021, 4, 15, 12, 0, 0, tzinfo=datetime.timezone.utc) |
| 1087 | + >>> dt |
| 1088 | + datetime.datetime(2021, 4, 15, 12, 0, tzinfo=datetime.timezone.utc) |
| 1089 | + |
| 1090 | + >>> tz_ir = datetime.timezone(timedelta(hours=4, minutes=30), 'Asia/Tehran') |
| 1091 | + >>> dt.astimezone(tz_ir) |
| 1092 | + datetime.datetime(2021, 4, 15, 16, 30, tzinfo=datetime.timezone(datetime.timedelta(seconds=16200), 'Asia/Tehran')) |
| 1093 | + |
| 1094 | + |
| 1095 | +* **متد** ``utcoffset`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.utcoffset>`__]: اگر پارامتر ``tzinfo`` برابر ``None`` باشد، مقدار ``None`` و در غیر این صورت مقدار ``self.tzinfo.utcoffset(None)`` را برمیگرداند. |
| 1096 | + |
| 1097 | +* **متد** ``tzname`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.tzname>`__]: اگر پارامتر ``tzinfo`` برابر ``None`` باشد، مقدار ``None`` و در غیر این صورت مقدار ``self.tzinfo.tzname(None)`` را برمیگرداند. |
| 1098 | + |
| 1099 | +:: |
| 1100 | + |
| 1101 | + >>> from datetime import timedelta, timezone, datetime |
| 1102 | + |
| 1103 | + >>> tz = timezone(timedelta(hours=4, minutes=30), 'Asia/Tehran') |
| 1104 | + >>> dt = datetime(year=2021, month=4, day=15, hour=12, minute=0, tzinfo=tz) |
| 1105 | + |
| 1106 | + >>> dt.utcoffset() |
| 1107 | + datetime.timedelta(seconds=16200) |
| 1108 | + |
| 1109 | + >>> dt.tzname() |
| 1110 | + 'Asia/Tehran' |
| 1111 | + |
| 1112 | + |
| 1113 | + |
| 1114 | +* **متد** ``timestamp`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.timestamp>`__]: معادل POSIX timestamp از زمان شی مورد نظر را در قالب یک شی ``float`` برمیگرداند:: |
| 1115 | + |
| 1116 | + >>> import datetime |
| 1117 | + |
| 1118 | + >>> today = datetime.datetime(2021, 4, 15, 12, 0) |
| 1119 | + >>> today.timestamp() |
| 1120 | + 1618471800.0 |
| 1121 | + |
| 1122 | + توجه داشته باشید استفاده از این متد تنها محدود به سالهای مابین ۱۹۷۰ تا ۲۰۳۸ میباشد. چرا که این متد از تابع localtime یا gmtime در زبان برنامهنویسی C استفاده میکند که از سال ۲۰۳۸ به بعد مقدار timestamp از نوع signed 32-bit integer در این زبان، Overflow خواهد داشت! [`ویکیپدیا: Year 2038 problem <https://en.wikipedia.org/wiki/Year_2038_problem>`__] |
| 1123 | + |
| 1124 | + |
| 1125 | +* **متد** ``toordinal`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.toordinal>`__]: معادل proleptic Gregorian ordinal از شی مورد نظر را برمیگرداند:: |
| 1126 | + |
| 1127 | + >>> import datetime |
| 1128 | + |
| 1129 | + >>> today = datetime.datetime(2021, 4, 15, 12, 0) |
| 1130 | + >>> today.toordinal() |
| 1131 | + 737895 |
| 1132 | + |
| 1133 | + |
| 1134 | + |
| 1135 | +* **متد** ``weekday`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.isocalendar>`__]: شماره روز از هفته جاری را برمیگرداند. دوشنبه:صفر، سهشنبه:۱ ... یکشنبه:۶:: |
| 1136 | + |
| 1137 | + >>> import datetime |
| 1138 | + |
| 1139 | + >>> today = datetime.datetime(2021, 4, 15, 12, 0) # Thursday, April 15, 2021 |
| 1140 | + >>> today.weekday() |
| 1141 | + 3 |
| 1142 | + |
| 1143 | + |
| 1144 | + |
| 1145 | +* **متد** ``isoweekday`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.isoweekday>`__]: شماره روز از هفته جاری را بر اساس استاندارد ISO calendar برمیگرداند. دوشنبه:۱، سهشنبه:۲ ... یکشنبه:۷:: |
| 1146 | + |
| 1147 | + >>> import datetime |
| 1148 | + |
| 1149 | + >>> today = datetime.datetime(2021, 4, 15, 12, 0) # Thursday, April 15, 2021 |
| 1150 | + >>> today.isoweekday() |
| 1151 | + 4 |
| 1152 | + |
| 1153 | + |
| 1154 | +* **متد** ``isocalendar`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.isocalendar>`__]: معادل ISO calendar از مقدار تاریخ شی مورد نظر را برمیگرداند:: |
| 1155 | + |
| 1156 | + >>> import datetime |
| 1157 | + |
| 1158 | + >>> today = datetime.datetime(2021, 4, 15, 12, 0) # Thursday, April 15, 2021 |
| 1159 | + >>> today.isocalendar() |
| 1160 | + (2021, 15, 4) |
| 1161 | + |
| 1162 | + |
| 1163 | + |
| 1164 | + از پایتون نسخه 3.9 نوع خروجی این متد به صورت زیر تغییر کرده است:: |
| 1165 | + |
| 1166 | + |
| 1167 | + >>> today.isocalendar() |
| 1168 | + datetime.IsoCalendarDate(year=2021, week=14, weekday=5) |
| 1169 | + |
| 1170 | + |
| 1171 | +* **متد** ``isoformat`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.isoformat>`__]: معادل مقدار زمان ثبت شده در شی مورد نظر را در قالب استاندارد ISO 8601 برمیگرداند:: |
| 1172 | + |
| 1173 | + >>> import datetime |
| 1174 | + |
| 1175 | + >>> today = datetime.datetime(2021, 4, 15, 12, 0) |
| 1176 | + >>> today.isoformat() |
| 1177 | + '2021-04-15T12:00:00' |
| 1178 | + |
| 1179 | + :: |
| 1180 | + |
| 1181 | + >>> today = datetime.datetime(2021, 4, 15, 12, 0, tzinfo=datetime.timezone.utc) |
| 1182 | + >>> today.isoformat() |
| 1183 | + '2021-04-15T12:00:00+00:00' |
| 1184 | + |
| 1185 | + |
| 1186 | + |
| 1187 | +* **متد** ``replace`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.replace>`__]: با استفاده از این متد میتوان یک شی ``datetime.datetime`` جدید همانند شی جاری ایجاد کرد ولی با کمی تغییرات:: |
| 1188 | + |
| 1189 | + replace(year, |
| 1190 | + month, |
| 1191 | + day, |
| 1192 | + hour=0, |
| 1193 | + minute=0, |
| 1194 | + second=0, |
| 1195 | + microsecond=0, |
| 1196 | + tzinfo=None, *, fold=0) |
| 1197 | + |
| 1198 | + :: |
| 1199 | + |
| 1200 | + >>> import datetime |
| 1201 | + >>> today = datetime.datetime(2021, 4, 15, 12, 0) |
| 1202 | + |
| 1203 | + >>> another_day = today.replace(day=22) |
| 1204 | + >>> another_day |
| 1205 | + datetime.datetime(2021, 4, 22, 12, 0) |
| 1206 | + |
| 1207 | + |
| 1208 | + به مثالی دیگر توجه نمایید:: |
| 1209 | + |
| 1210 | + >>> from datetime import timedelta, timezone, datetime |
| 1211 | + |
| 1212 | + >>> tz = timezone(timedelta(hours=-5), 'Eastern Time Zone') |
| 1213 | + >>> dt = datetime(2021, 4, 15, 12, 0, tzinfo=tz) |
| 1214 | + >>> dt |
| 1215 | + datetime.datetime(2021, 4, 15, 12, 0, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), 'Eastern Time Zone')) |
| 1216 | + |
| 1217 | + |
| 1218 | + >>> tz_teh = timezone(timedelta(hours=4, minutes=30), 'Asia/Tehran') |
| 1219 | + >>> dt.replace(tzinfo=tz_teh) |
| 1220 | + datetime.datetime(2021, 4, 15, 12, 0, tzinfo=datetime.timezone(datetime.timedelta(seconds=16200), 'Asia/Tehran')) |
| 1221 | + |
| 1222 | + |
| 1223 | + توجه داشته باشید که وظیفه این متد تنها جایگزینی مقادیر میباشد و با جایگزینی منطقه زمانی، تغییری در زمان ثبت شده ایجاد نمیگردد. |
| 1224 | + |
| 1225 | + |
| 1226 | + |
| 1227 | +* **متد** ``(format)strftime`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.strftime>`__]: این متد بسیار پرکاربرد است و عملکرد آن به این صورت میباشد که یک قالب (format) را دریافت و معادل ``str`` از شی مورد نظر را بر اساس ساختار آن قالب برمیگردادند. ساختار قالب در اینجا با آنچه توسط استاندارد ISO 8601 مطرح شده است کمی متفاوت میباشد که در انتهای این درس مورد بررسی قرار خواهد گرفت. |
| 1228 | + |
| 1229 | + |
| 1230 | + |
| 1231 | + |
| 1232 | +naive / aware |
| 1233 | +---------------------------- |
| 1234 | + |
| 1235 | +یک شی ``datetime.datetime`` (به عنوان مثال متغیر: ``dt``) از نوع aware خواهد بود اگر دو شرط زیر برای آن درست باشد: |
| 1236 | + |
| 1237 | + |
| 1238 | +* مقدار پارامتر ``dt.zinfo`` مخالف ``None`` باشد. |
| 1239 | +* حاصل ``dt.tzinfo.utcoffset(dt)`` مخالف ``None`` باشد. |
| 1240 | + |
| 1241 | + |
| 1242 | + |
| 1243 | +متدهای ``strftime`` و ``strptime`` |
| 1244 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 1245 | + |
| 1246 | + |
| 1247 | + |
1048 | 1248 |
|
1049 | 1249 |
|
1050 | 1250 |
|
|
0 commit comments