Skip to content

Commit 8ca0620

Browse files
author
Saeid Darvish
committed
l25: datetime.tzinfo - starting
1 parent fb71fa9 commit 8ca0620

File tree

1 file changed

+81
-7
lines changed

1 file changed

+81
-7
lines changed

‎lessons/l25.rst‎

Lines changed: 81 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
در زبان برنامه‌نویسی پایتون اشیای مرتبط با زمان براساس توانایی آگاهی آن‌ها از منطقه زمانی (Time zone) به دو دسته **«آگاه» (aware)** و **«ساده» (naive)** تقسیم‌بندی می‌شوند. بر همین اساس اشیای کلاس ``date`` از نوع naive و اشیای دو کلاس ``time`` و ``datetime`` می‌توانند برحسب شرایط aware یا naive باشند.
5353

5454

55+
5556
کلاس ``datetime.timedelta``
5657
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5758

@@ -173,6 +174,44 @@
173174
در ادامه به همراه بخش‌های بعدی این درس با کاربرد اصلی اشیای ``datetime.timedelta`` آشنا خواهیم شد.
174175

175176

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+
176215
کلاس ``datetime.date``
177216
~~~~~~~~~~~~~~~~~~~~~~~~~~~
178217

@@ -512,44 +551,44 @@
512551
513552
::
514553

515-
>>> t = datetime.time.fromisoformat('04')
554+
>>> t = datetime.time.fromisoformat('04') # 'HH'
516555
>>> t
517556
datetime.time(4, 0)
518557

519558
::
520559

521-
>>> t = datetime.time.fromisoformat('04:23')
560+
>>> t = datetime.time.fromisoformat('04:23') # 'HH:MM'
522561
>>> t
523562
datetime.time(4, 23)
524563

525564
::
526565

527566

528-
>>> t = datetime.time.fromisoformat('04:23:01')
567+
>>> t = datetime.time.fromisoformat('04:23:01') # 'HH:MM:SS'
529568
>>> t
530569
datetime.time(4, 23, 1)
531570
532571
::
533572

534-
>>> t = datetime.time.fromisoformat('04:23:01.000384')
573+
>>> t = datetime.time.fromisoformat('04:23:01.000384') # 'HH:MM:SS.ffffff'
535574
>>> t
536575
datetime.time(4, 23, 1, 384)
537576

538577
::
539578

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'
541580
>>> t
542581
datetime.time(4, 23, 1, tzinfo=datetime.timezone(datetime.timedelta(seconds=16200)))
543582

544583
::
545584

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'
547586
>>> t
548587
datetime.time(4, 23, 1, 384, tzinfo=datetime.timezone(datetime.timedelta(seconds=16200)))
549588

550589
::
551590

552-
>>> t = datetime.time.fromisoformat('04+04:30')
591+
>>> t = datetime.time.fromisoformat('04+04:30') # 'HH+HH:MM'
553592
>>> t
554593
datetime.time(4, 0, tzinfo=datetime.timezone(datetime.timedelta(seconds=16200)))
555594

@@ -599,6 +638,41 @@
599638

600639

601640

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+
602676

603677
کلاس ``datetime.datetime``
604678
~~~~~~~~~~~~~~~~~~~~~~~~~~~

0 commit comments

Comments
(0)