|
55 | 55 | کلاس ``datetime.timedelta`` |
56 | 56 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
57 | 57 |
|
| 58 | +پیش از بررسی کلاسهای یاد شده لازم است با کلاسی دیگر از ماژول datetime آشنا شویم. در زبان برنامهنویسی پایتون از اشیای کلاس ``timedelta`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#timedelta-objects>`__] برای بیان «مدت زمان» (duration) مشخص یا اختلاف بین دو تاریخ یا ساعت استفاده میشود. الگوی نمونهسازی از این کلاس به شکل زیر است:: |
| 59 | + |
| 60 | + td = timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) |
| 61 | + |
| 62 | +با نمونهسازی از این کلاس و ارسال آرگومانهای دلخواه، براساس تمام واحدهای پرتکرار از زمان یا حتی ترکیبی از آنها میتوانیم یک مدتزمان در سیستم زمانی پایتون ایجاد کنیم؛ هفته (weeks)، روز (days)، ساعت (hours)، دقیقه (minutes)، ثانیه (seconds)، میلیثانیه (milliseconds یا همان 0.001 ثانیه) و میکروثانیه (microseconds یا همان 0.000001 ثانیه). تمامی این مقادیر اختیاری و با مقدار پیشفرض ``0`` هستند که میتوانند از نوع ``int`` یا ``float``، مثبت یا منفی باشند |
| 63 | + |
| 64 | +:: |
| 65 | + |
| 66 | + >>> from datetime import timedelta |
| 67 | + |
| 68 | + |
| 69 | +:: |
| 70 | + |
| 71 | + >>> no_duration = timedelta() |
| 72 | + >>> no_duration |
| 73 | + datetime.timedelta(0) |
| 74 | + |
| 75 | + >>> no_duration.total_seconds() |
| 76 | + 0.0 |
| 77 | + |
| 78 | +:: |
| 79 | + |
| 80 | + >>> delta = timedelta( |
| 81 | + ... days=50, |
| 82 | + ... seconds=27, |
| 83 | + ... microseconds=10, |
| 84 | + ... milliseconds=29000, |
| 85 | + ... minutes=5, |
| 86 | + ... hours=8, |
| 87 | + ... weeks=2 |
| 88 | + ... ) |
| 89 | + >>> # Only days, seconds, and microseconds remain |
| 90 | + >>> delta |
| 91 | + datetime.timedelta(days=64, seconds=29156, microseconds=10) |
| 92 | + |
| 93 | + >>> delta.total_seconds() |
| 94 | + 5558756.00001 |
| 95 | + |
| 96 | +:: |
| 97 | + |
| 98 | + >>> one_half_days = timedelta(days=1.5) |
| 99 | + >>> one_half_days |
| 100 | + datetime.timedelta(days=1, seconds=43200) |
| 101 | + |
| 102 | + >>> one_half_days.total_seconds() |
| 103 | + 129600.0 |
| 104 | + |
| 105 | + |
| 106 | + |
| 107 | +توجه داشته باشید که از تمام انواع آرگومانی که ارسال میکنید این تنها ``seconds`` ،``days`` و ``microseconds`` هستند که دارای attribute متناظر بوده و قابل دسترس میباشند. در واقع تمامی مقادیر ارسالی در زمان نمونهسازی با یکدیگر ترکیب شده و در نهایت به این سه attribute تبدیل میشوند. به مقداردهی در زمان نمونهسازی و نیز به خروجی سطر پایانی از نمونه کدهای بالا توجه نمایید. |
| 108 | + |
| 109 | +همچنین از نسخه 3.2 پایتون میتوانید با استفاده از متد ``total_seconds`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.timedelta.total_seconds>`__] کل مدت زمان ذخیره شده در شی timedelta را در واحد ثانیه دریافت نمایید:: |
| 110 | + |
| 111 | + >>> delta = timedelta(microseconds=1) |
| 112 | + >>> delta.total_seconds() |
| 113 | + 1e-06 |
| 114 | + |
| 115 | +دو شی ``datetime.timedelta`` پایتون قابلیت شرکت در محاسبات ریاضی را دارند:: |
| 116 | + |
| 117 | + |
| 118 | + >>> from datetime import timedelta |
| 119 | + |
| 120 | + >>> year = timedelta(days=365) |
| 121 | + |
| 122 | + >>> ten_years = 10 * year |
| 123 | + >>> ten_years |
| 124 | + datetime.timedelta(days=3650) |
| 125 | + |
| 126 | + >>> ten_years.days // 365 |
| 127 | + 10 |
| 128 | + |
| 129 | + >>> nine_years = ten_years - year |
| 130 | + >>> nine_years |
| 131 | + datetime.timedelta(days=3285) |
| 132 | + |
| 133 | + >>> three_years = nine_years // 3 |
| 134 | + >>> three_years |
| 135 | + datetime.timedelta(days=1095) |
| 136 | + |
| 137 | + >>> three_years.days // 365 |
| 138 | + 3 |
| 139 | + |
| 140 | +:: |
| 141 | + |
| 142 | + >>> day = timedelta(days=1) |
| 143 | + >>> negative_day = timedelta(days=-1) |
| 144 | + |
| 145 | + >>> negative_day |
| 146 | + datetime.timedelta(days=-1) |
| 147 | + |
| 148 | + >>> day + negative_day |
| 149 | + datetime.timedelta(0) |
| 150 | + |
| 151 | + >>> day - negative_day |
| 152 | + datetime.timedelta(days=2) |
| 153 | + |
| 154 | + |
| 155 | + |
| 156 | +همچنین دو شی ``datetime.timedelta`` پایتون قابلیت مقایسه با یکدیگر را دارند:: |
| 157 | + |
| 158 | + >>> from datetime import timedelta |
| 159 | + >>> year = timedelta(days=365) |
| 160 | + >>> three_years = timedelta(days=1095) |
| 161 | + |
| 162 | + >>> year == year |
| 163 | + True |
| 164 | + >>> year == three_years |
| 165 | + False |
| 166 | + >>> year > three_years |
| 167 | + False |
| 168 | + >>> year < three_years |
| 169 | + True |
| 170 | + >>> year * 3 == three_years |
| 171 | + True |
| 172 | + |
| 173 | +در ادامه به همراه بخشهای بعدی این درس با کاربرد اصلی اشیای ``datetime.timedelta`` آشنا خواهیم شد. |
58 | 174 |
|
59 | 175 |
|
60 | 176 | کلاس ``datetime.date`` |
|
0 commit comments