Skip to content

Commit 17b63df

Browse files
author
Saeid Darvish
committed
l25: datetime.datetime, Compare
1 parent 2119431 commit 17b63df

1 file changed

Lines changed: 32 additions & 10 deletions

File tree

lessons/l25.rst

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,7 @@ naive / aware
798798
ایجاد شی ``datetime``
799799
---------------------------
800800

801-
به ده شیوه زیر می‌توان یک شی از نوع ``datetime.datetime`` ایجاد کرد:
801+
به یازده شیوه زیر می‌توان یک شی از نوع ``datetime.datetime`` ایجاد کرد که بنابر شرایط می‌توانید از آن‌ها بهره بگیرید:
802802

803803

804804

@@ -816,7 +816,7 @@ naive / aware
816816
tzinfo=None, *, fold=0)
817817

818818

819-
::
819+
یک نمونه استفاده::
820820

821821

822822
>>> import datetime
@@ -826,7 +826,7 @@ naive / aware
826826

827827
|
828828
829-
**۲- با استفاده از کلاس متد** ``today`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.today>`__]، این متد زمان لحظه جاری را بدون در نظر گرفتن منطقه زمانی برمی‌گرداند (``tzinfo=None``)::
829+
**۲- با استفاده از کلاس متد** ``today`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.today>`__]، این متد زمان لحظه جاری سیستم را بدون امکان ثبت منطقه زمانی (``tzinfo=None``) در قالب یک شی از کلاس ``datetime.datetime`` برمی‌گرداند::
830830

831831

832832
>>> import datetime
@@ -836,7 +836,7 @@ naive / aware
836836

837837
|
838838
839-
**۳- با استفاده از کلاس متد** ``(tz=None)now`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.now>`__]، عملکرد این متد نیز همانند ``today`` می‌باشد با این تفاوت که می‌توان یک شی منطقه زمانی نیز به صورت آرگومان به آن ارسال نمود::
839+
**۳- با استفاده از کلاس متد** ``(tz=None)now`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.now>`__]، عملکرد این متد نیز همانند ``today`` می‌باشد با این تفاوت که می‌توان یک شی منطقه زمانی نیز به صورت آرگومان به آن ارسال و ثبت نمود::
840840

841841

842842
>>> import datetime
@@ -853,10 +853,12 @@ naive / aware
853853
datetime.datetime(2021, 4, 13, 21, 2, 0, 485083, tzinfo=datetime.timezone(datetime.timedelta(seconds=16200)))
854854

855855

856+
توجه داشته باشید ارسال شی منطقه زمانی (``tz``) در نمونه کد بالا باعث تغییر در زمان نشد. علت این امر نیز مربوط به منطقه زمانی سیستمی است که برنامه بر روی آن اجرا می‌شود، در این سیستم منطقه زمانی بر روی ``04:30+UTC`` (وقت ساعت تابستانی، تهران) تنظیم بوده که کاملا برابر با مقدار ``tz`` ارسال شده می‌باشد.
857+
856858

857859
|
858860
859-
**۴- با استفاده از کلاس متد** ``utcnow`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.utcnow>`__]، خروجی این متد همانند خروجی ``datetime.now(timezone.utc)`` می‌باشد. یعنی زمان لحظه جاری را بر اساس منطقه زمانی UTC برمی‌گرداند ولی با این تفاوت که مقدار پارامتر ``tzinfo`` آن برابر ``None`` خواهد بود::
861+
**۴- با استفاده از کلاس متد** ``utcnow`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.utcnow>`__]، خروجی این متد همانند خروجی ``datetime.now(timezone.utc)`` می‌باشد. یعنی زمان لحظه جاری سیستم را بر اساس منطقه زمانی UTC برمی‌گرداند ولی با این تفاوت که مقدار پارامتر ``tzinfo`` آن برابر ``None`` خواهد بود::
860862

861863

862864
>>> import datetime
@@ -898,7 +900,7 @@ naive / aware
898900

899901
|
900902
901-
**۶- با استفاده از کلاس متد** ``(timestamp)utcfromtimestamp`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.utcfromtimestamp>`__]، خروجی این متد همانند ``fromtimestamp(timestamp, datetime.timezone.utc)`` بوده و معادل POSIX timestamp یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.datetime`` را بر مبنای منطقه زمانی UTC برمی‌گرداند. ولی با این تفاوت که مقدار پارامتر ``tzinfo`` آن برابر ``None`` خواهد بود::
903+
**۶- با استفاده از کلاس متد** ``(timestamp)utcfromtimestamp`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.utcfromtimestamp>`__]، خروجی این متد نیز همانند خروجی کلاس متد ``fromtimestamp(timestamp, datetime.timezone.utc)`` بوده و معادل POSIX timestamp یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.datetime`` را بر مبنای منطقه زمانی UTC برمی‌گرداند. ولی با این تفاوت که مقدار پارامتر ``tzinfo`` آن برابر ``None`` خواهد بود::
902904

903905

904906
>>> import datetime
@@ -920,7 +922,7 @@ naive / aware
920922

921923
|
922924
923-
**۸- با استفاده از کلاس متد** ``fromisocalendar`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisocalendar>`__] (البته از نسخه 3.8 پایتون به بعد)، در تعریف این متد سه پارامتر از نوع ``int`` قرار داده شده است که از سمت چپ به ترتیب معرف سال، شماره هفته در سال و شماره روز از هفته مورد نظر می‌باشند. در واقع این متد معادل ISO calendar [`ویکی‌پدیا <https://en.wikipedia.org/wiki/ISO_week_date>`__] یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.date`` را برمی‌گرداند. در این استاندارد، یک سال شامل ۵۲ هفته می‌باشد که روزهای هر هفته نیز از روز دوشنبه (Monday) با شماره یک محاسبه می‌گردد (دوشنبه:۱، سه‌شنبه:۲، ... یکشنبه:۷). باید توجه داشت مقادیر مربوط به ساعت همانند minute ،hour یا ``tzinfo`` شی ایجاد شده برابر ``None`` خواهد بود::
925+
**۸- با استفاده از کلاس متد** ``fromisocalendar`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisocalendar>`__] (البته از نسخه 3.8 پایتون به بعد)، در تعریف این متد سه پارامتر از نوع ``int`` قرار داده شده است که از سمت چپ به ترتیب معرف سال، شماره هفته در سال و شماره روز از هفته مورد نظر می‌باشند. در واقع این متد معادل ISO calendar [`ویکی‌پدیا <https://en.wikipedia.org/wiki/ISO_week_date>`__] یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.datetime`` را برمی‌گرداند. در این استاندارد، یک سال تقریبا شامل ۵۲ هفته می‌باشد که روزهای هر هفته نیز از روز دوشنبه (Monday) با شماره یک محاسبه می‌گردد (دوشنبه:۱، سه‌شنبه:۲، ... یکشنبه:۷). باید توجه داشت مقادیر مربوط به ساعت همانند minute ،hour یا ``tzinfo`` شی ایجاد شده برابر ``None`` خواهد بود::
924926

925927
datetime.fromisocalendar(year, week, day)
926928

@@ -953,17 +955,37 @@ naive / aware
953955

954956
YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
955957

956-
الگوی بالا حالت‌های قابل پذیرش از قالب استاندارد ISO 8601 را برای این متد نمایش می‌دهد. به چند نمونه کد زیر توجه نمایید:
958+
الگوی بالا حالت‌های قابل پذیرش از قالب استاندارد ISO 8601 را برای این متد نمایش می‌دهد که در این الگو به جای ``*`` هر کاراکتری می‌تواند قرار بگیرد و بخش‌های داخل براکت (``[]``) اختیاری هستند. به چند نمونه کد زیر نیز توجه نمایید:
957959

958960
::
959961

960-
>>> import datetime
961-
>>> d = datetime.datetime.fromisoformat('2021-04-07')
962+
>>> from datetime import datetime
963+
964+
>>> datetime.fromisoformat('2011-11-04T00:05:23') # YYYY-MM-DDTHH:MM:SS
965+
datetime.datetime(2011, 11, 4, 0, 5, 23)
966+
967+
>>> datetime.fromisoformat('2011-11-04 00:05:23') # YYYY-MM-DD HH:MM:SS
968+
datetime.datetime(2011, 11, 4, 0, 5, 23)
969+
970+
>>> datetime.fromisoformat('2011-11-04 00:05:23.283+00:00') # YYYY-MM-DD HH:MM:SS.fff+HH:MM
971+
datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone.utc)
962972

973+
>>> datetime.fromisoformat('2011-11-04 00:05:23.283+04:30') # YYYY-MM-DD HH:MM:SS.fff+HH:MM
974+
datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone(datetime.timedelta(seconds=16200)))
963975

964976

965977

978+
|
979+
980+
**۱۱- با استفاده از کلاس متد** ``strptime`` [`اسناد پایتون <https://docs.python.org/3/library/datetime.html#datetime.datetime.strptime>`__]، تعریف این متد به صورت زیر می‌باشد::
981+
982+
datetime.strptime(date_string, format)
966983

984+
این متد بسیار پرکاربرد بوده و عملکرد آن به این صورت می‌باشد که یک زمان مشخص را از نوع ``str`` به همراه قالب آن زمان دریافت و یک شی از کلاس ``datetime.datetime`` برمی‌گرداند. ساختار قالب در اینجا با آنچه توسط استاندارد ISO 8601 مطرح شده است کمی متفاوت می‌باشد که در انتهای این درس مورد بررسی قرار خواهد گرفت.
985+
986+
987+
مقایسه دو شی ``datetime``
988+
----------------------------
967989

968990

969991

0 commit comments

Comments
 (0)