|
52 | 52 | در زبان برنامهنویسی پایتون اشیای مرتبط با زمان براساس توانایی آگاهی آنها از منطقه زمانی (Time zone) به دو دسته **«آگاه» (aware)** و **«ساده» (naive)** تقسیمبندی میشوند. بر همین اساس اشیای کلاس ``date`` از نوع naive و اشیای دو کلاس ``time`` و ``datetime`` میتوانند برحسب شرایط aware یا naive باشند. |
53 | 53 |
|
54 | 54 |
|
| 55 | + |
55 | 56 | کلاس ``datetime.timedelta`` |
56 | 57 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
57 | 58 |
|
|
173 | 174 | در ادامه به همراه بخشهای بعدی این درس با کاربرد اصلی اشیای ``datetime.timedelta`` آشنا خواهیم شد. |
174 | 175 |
|
175 | 176 |
|
| 177 | + |
| 178 | +کلاس ``datetime.tzinfo`` |
| 179 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 180 | + |
| 181 | +هر وقت که صحبت از ساعت و زمان باشد، «منطقه زمانی» (Time zone) نیز جزئی از گفتگو خواهد بود. در زبان برنامهنویسی پایتون کلاس ``tzinfo`` از ماژول کلاس ``datetime`` امکان ایجاد منطقه زمانی را فراهم آورده است [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.tzinfo>`__]. ``tzinfo`` در واقع یک کلاس Abstract (درس نوزدهم) میباشد که نمیتوان از آن نمونهسازی و شی ایجاد کرد ولی میتوان به کمک آن کلاس منطقه زمانی دلخواه خود را ایجاد نماییم. برای مشاهده اجزا و نکات مربوط به پیادهسازی منطقه زمانی دلخواه میتوانید به مستندات زبان برنامهنویسی پایتون مراجعه نمایید. |
| 182 | + |
| 183 | +اشتباه نکنید، در اکثر مواقع نیازی به پیادهسازی یک کلاس منطقه زمانی در پایتون نمیباشد. چرا که از قبل کلاس ``timezone`` از ماژول ``datetime`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#timezone-objects>`__] توسط این زبان فراهم آورده شده است. این کلاس یک subclass از ``datetime.tzinfo`` بوده و مبنای محاسبه منطقه زمانی در آن UTC [`ویکیپدیا <https://en.wikipedia.org/wiki/Coordinated_Universal_Time>`__] میباشد. این کلاس به تنهایی تمامی نیازهای معمول ما نسبت به ثبت منطقه زمانی در پایتون را برطرف میسازد. در سراسر ایران منطقه زمانی یکسان میباشد و به صورت استاندارد از مبنای UTC محاسبه میگردد؛ به این صورت که در شش ماه نخست سال برابر ``UTC+4:30`` و در شش ماه دوم از سال این مقدار برابر ``UTC+3:30`` خواهد بود [`ویکیپدیا Iran Standard Time (IRST) <https://en.wikipedia.org/wiki/Iran_Standard_Time>`__]. |
| 184 | + |
| 185 | + |
| 186 | +کلاس ``datetime.timezone`` |
| 187 | +------------------------------ |
| 188 | + |
| 189 | +الگوی نمونهسازی از این کلاس به صورت زیر است:: |
| 190 | + |
| 191 | + |
| 192 | + timezone(offset, name=None) |
| 193 | + |
| 194 | +که در آن پارامتر ``offset`` یک شی از نوع ``datetime.timedelta`` میباشد که میبایست حاوی فاصله منطقه زمانی مورد نظر ما از مبدا UTC باشد (مثبت یا منفی) و ``name`` نیز یک نام دلخواه و اختیاری برای شناسایی منطقه زمانی ایجاد شده میباشد:: |
| 195 | + |
| 196 | + >>> from datetime import timedelta, timezone |
| 197 | + |
| 198 | + >>> tz = timezone(timedelta(hours=4, minutes=30), 'Asia/Tehran') |
| 199 | + |
| 200 | + >>> tz |
| 201 | + datetime.timezone(datetime.timedelta(seconds=16200), 'Asia/Tehran') |
| 202 | + |
| 203 | + >>> type(tz) |
| 204 | + <class 'datetime.timezone'> |
| 205 | + |
| 206 | +شی ``tz`` ایجاد شده در نمونه کد بالا، بیانگر منطقه زمانی ``UTC+4:30`` میباشد. به عنوان مثالی دیگر، ایجاد شی برای منطقه زمانی ``UTC-05:00`` به صورت زیر میباشد:: |
| 207 | + |
| 208 | + |
| 209 | + >>> tz = timezone(timedelta(hours=-5), 'Eastern Time Zone') |
| 210 | + |
| 211 | + |
| 212 | + |
| 213 | + |
| 214 | + |
176 | 215 | کلاس ``datetime.date`` |
177 | 216 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
178 | 217 |
|
|
512 | 551 |
|
513 | 552 | :: |
514 | 553 |
|
515 | | - >>> t = datetime.time.fromisoformat('04') |
| 554 | + >>> t = datetime.time.fromisoformat('04') # 'HH' |
516 | 555 | >>> t |
517 | 556 | datetime.time(4, 0) |
518 | 557 |
|
519 | 558 | :: |
520 | 559 |
|
521 | | - >>> t = datetime.time.fromisoformat('04:23') |
| 560 | + >>> t = datetime.time.fromisoformat('04:23') # 'HH:MM' |
522 | 561 | >>> t |
523 | 562 | datetime.time(4, 23) |
524 | 563 |
|
525 | 564 | :: |
526 | 565 |
|
527 | 566 |
|
528 | | - >>> t = datetime.time.fromisoformat('04:23:01') |
| 567 | + >>> t = datetime.time.fromisoformat('04:23:01') # 'HH:MM:SS' |
529 | 568 | >>> t |
530 | 569 | datetime.time(4, 23, 1) |
531 | 570 |
|
532 | 571 | :: |
533 | 572 |
|
534 | | - >>> t = datetime.time.fromisoformat('04:23:01.000384') |
| 573 | + >>> t = datetime.time.fromisoformat('04:23:01.000384') # 'HH:MM:SS.ffffff' |
535 | 574 | >>> t |
536 | 575 | datetime.time(4, 23, 1, 384) |
537 | 576 |
|
538 | 577 | :: |
539 | 578 |
|
540 | | - >>> t = datetime.time.fromisoformat('04:23:01+04:30') |
| 579 | + >>> t = datetime.time.fromisoformat('04:23:01+04:30') # 'HH:MM:SS+HH:MM' |
541 | 580 | >>> t |
542 | 581 | datetime.time(4, 23, 1, tzinfo=datetime.timezone(datetime.timedelta(seconds=16200))) |
543 | 582 |
|
544 | 583 | :: |
545 | 584 |
|
546 | | - >>> t = datetime.time.fromisoformat('04:23:01.000384+04:30') |
| 585 | + >>> t = datetime.time.fromisoformat('04:23:01.000384+04:30') # 'HH:MM:SS.ffffff+HH:MM' |
547 | 586 | >>> t |
548 | 587 | datetime.time(4, 23, 1, 384, tzinfo=datetime.timezone(datetime.timedelta(seconds=16200))) |
549 | 588 |
|
550 | 589 | :: |
551 | 590 |
|
552 | | - >>> t = datetime.time.fromisoformat('04+04:30') |
| 591 | + >>> t = datetime.time.fromisoformat('04+04:30') # 'HH+HH:MM' |
553 | 592 | >>> t |
554 | 593 | datetime.time(4, 0, tzinfo=datetime.timezone(datetime.timedelta(seconds=16200))) |
555 | 594 |
|
|
599 | 638 |
|
600 | 639 |
|
601 | 640 |
|
| 641 | +* **متد** ``isoformat`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.time.isoformat>`__]: معادل مقدار ساعت شی را در قالب استاندارد ISO 8601 برمیگرداند:: |
| 642 | + |
| 643 | +
|
| 644 | + isoformat(timespec='auto') |
| 645 | + |
| 646 | + این متد یک پارامتر اختیاری دارد که میتواند یکی از مقادیر ``milliseconds`` ``minutes`` ``hours`` ``auto`` ``microseconds`` را دریافت کند. مقدار این پارامتر قالب خروجی را مشخص میکند: |
| 647 | + |
| 648 | + :: |
| 649 | + |
| 650 | + >>> from datetime import time |
| 651 | + |
| 652 | + >>> t = time(hour=22, minute=4, second=30, microsecond=300) |
| 653 | + |
| 654 | + >>> t.isoformat() |
| 655 | + '22:04:30.000300' |
| 656 | + |
| 657 | + >>> t.isoformat('auto') |
| 658 | + '22:04:30.000300' |
| 659 | + |
| 660 | + >>> t.isoformat('hours') |
| 661 | + '22' |
| 662 | + |
| 663 | + >>> t.isoformat('minutes') |
| 664 | + '22:04' |
| 665 | + |
| 666 | + >>> t.isoformat('milliseconds') |
| 667 | + '22:04:30.000' |
| 668 | + |
| 669 | + >>> t.isoformat('microseconds') |
| 670 | + '22:04:30.000300' |
| 671 | + |
| 672 | + |
| 673 | + |
| 674 | + |
| 675 | + |
602 | 676 |
|
603 | 677 | کلاس ``datetime.datetime`` |
604 | 678 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
0 commit comments