وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

مقایسه Datetime با Delorean در پایتون – با و بدون منطقه زمانی

0 3
زمان لازم برای مطالعه: 3 دقیقه


معرفی

کار با تاریخ ها می تواند چالش برانگیز باشد و مدیریت تاریخ در پایتون نیز از این قاعده مستثنی نیست. پایتون داخلی 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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید