از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
مقایسه Datetime با Delorean در پایتون – با و بدون منطقه زمانی
سرفصلهای مطلب
معرفی
کار با تاریخ ها می تواند چالش برانگیز باشد و مدیریت تاریخ در پایتون نیز از این قاعده مستثنی نیست. پایتون داخلی datetime
ماژول ما را با چندین کلاس آشنا کرد – date
، datetime
، time
، timezone
و timedelta
و چندین کتابخانه خارجی برای رسیدگی به مسائل موجود در ماژول رسمی مانند Arrow ایجاد شده اند.
در این راهنما، ما نگاهی به روش مقایسه اشیاء تاریخ در آن خواهیم داشت دلورین – یک کتابخانه ساخته شده بر روی پیتز که کتابخانه استاندارد برای حل مسائل مربوط به مناطق زمانی است و dateutil که برای محاسبه دلتاها بین هر 2 شی تاریخ داده شده استفاده می شود.
نصب Delorean راه اندازی یک محیط مجازی
Delorean برای نصب از طریق در دسترس است pip
. به طور کلی توصیه می شود که در یک محیط مجازی کار کنید زیرا به شما امکان می دهد وابستگی های مورد نیاز پروژه های مختلف را جدا شده سازماندهی کنید.
در لینوکس یا MacOS برای ایجاد یک محیط مجازی، ما اجرا می کنیم:
$ python3 -m venv env
$ source env/bin/activate
$ python3 -m pip install delorean
متناوبا، از سوی دیگر، روی ویندوزی که می توانیم اجرا کنیم:
$ virtualenv env
$ .\env\Scripts\activate
$ python3 -m pip install delorean
مقایسه Datetime بدون منطقه زمانی (Naive Datetime) با استفاده از Delorean
بیایید با مقایسه تاریخهای ساده منطقه زمانی شروع کنیم – تاریخهایی که حاوی اطلاعات منطقه زمانی نیستند، اما یک نقطه زمانی معین را نشان میدهند. که گفته شد – شما می توانید تنظیم کنید timezone
از یک Delorean
هدف – شی ولی، وقتی دوباره چاپ شد، به UTC خواهد بود:
from delorean import Delorean
import datetime
naive_d1 = Delorean(datetime=datetime.datetime(2021, 5, 15), timezone='UTC').naive
naive_d2 = Delorean(datetime=datetime.datetime(2021, 5, 15, 5), timezone='UTC').naive
naive_d3 = Delorean(datetime=datetime.datetime(2021, 5, 15, 5), timezone='US/Central').naive
print("naive_d1 == naive_d2 is", naive_d1 == naive_d2)
print("naive_d2 > naive_d1 is", naive_d2 > naive_d1)
print("naive_d3 == naive_d2 + 5h is", naive_d3 == naive_d2 + datetime.timedelta(hours=5))
این نتیجه در:
naive_d1 == naive_d2 is False
naive_d2 > naive_d1 is True
naive_d3 == naive_d2 + 5h is True
naive_d1
برابر نیست naive_d2
چون دارد اطلاعات بیشتر – ساعت ها تعریف شده اند و بنابراین پیش فرض نیستند (ظهر).
این باعث می شود naive_d2
“بزرگتر از naive_d1
، قرار گرفتن در زمان بعدی.
naive_d3
در یک است منطقه زمانی مختلف نسبت به. تا naive_d2
، اما این به راحتی با افزودن a اصلاح می شود timedelta
از 5 ساعت به naive_d2
برای مطابقت با آنها، و True
برای برابری آنها بازگردانده می شود.
اگر قرار بود print بیرون naive_d2
و naive_d3
، حتی اگر هر دو روی ساعت 5 صبح تنظیم شده بودند:
print(naive_d2)
print(naive_d3)
شما می توانید یک جابجا شد نتیجه، زیرا هر دو با UTC مطابقت دارند:
2021-05-15 05:00:00
2021-05-15 10:00:00
مقایسه Datetime با Timezone (Aware Datetime) با استفاده از Delorean
منطقه زمانی آگاه تاریخ ها در یک منطقه زمانی منطبق نمی شوند. اگر قرار بود دو تاریخ بسازید که نشان دهنده ساعت یکسان در دو منطقه زمانی متفاوت است:
d1 = Delorean(datetime=datetime.datetime(2021, 5, 15, 5), timezone='UTC')
d2 = Delorean(datetime=datetime.datetime(2021, 5, 15, 5), timezone='Africa/Lagos')
اگر قرار بود print آنها را بیرون می آورند – هر دو نشانگر ساعت 5 صبح هستند، اما در مناطق زمانی متفاوت:
print(d2)
print(d3)
این نتیجه در:
Delorean(datetime=datetime.datetime(2021, 5, 15, 5, 0), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 5, 15, 5, 0), timezone='Africa/Lagos')
این باعث می شود مقایسه کمی متفاوت از تاریخ های ساده – است d2
مساوی با d3
اینجا؟ هر دوی آنها یکسان را نشان می دهند زمان ساعت، اما یکسان نیست نقطه در زمان. دلورین این دو را با هم مقایسه خواهد کرد Delorean
اشیاء همان را نشان می دهند نقطه در زمان، بنابراین آنها هستند یکسان نیست در چشمان کتابخانه
هر چند میتوانید زمان را با منطقه زمانی به تاریخها اضافه کنید تا مطابقت داشته باشد. این Africa/Lagos
منطقه زمانی فقط یک ساعت از آن عقب است UTC
بنابراین اگر یک ساعت به آن اضافه کنیم، همان نقطه زمانی را نشان خواهند داد:
from delorean import Delorean
import datetime
d1 = Delorean(datetime=datetime.datetime(2021, 5, 15), timezone='UTC')
d2 = Delorean(datetime=datetime.datetime(2021, 5, 15, 5), timezone='UTC')
d3 = Delorean(datetime=datetime.datetime(2021, 5, 15, 5), timezone='Africa/Lagos')
print("d2 == d3 +1h is", d2 == d3 + datetime.timedelta(hours=1))
print("d1 > d3 -", d1 > d3)
علاوه بر این، از آنجا که d1
داده ندارد روی ساعت – تا ظهر تنظیم شده است. بااینکه d1
متعلق به UTC
، هنوز هست 4 ساعت قبل از d3
:
d2 == d3 +1h is True
d1 > d3 is False
نتیجه
در این راهنما، ما نگاهی به روش مقایسه تاریخ های منطقه زمانی ساده و آگاه به منطقه زمانی در دلورین انداخته ایم.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-09 04:25:03