از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
ایجاد و تجزیه Datetime در پایتون با Delorean
سرفصلهای مطلب
معرفی
کار با زمان قرار می تواند کمی دلهره آور و چالش برانگیز باشد و مدیریت تاریخ در پایتون نیز از این قاعده مستثنی نیست. پایتون داخلی datetime
ماژول ما را با چندین کلاس آشنا کرد – date
، datetime
، time
، timezone
و timedelta
و چندین کتابخانه خارجی برای رسیدگی به مسائل موجود در ماژول رسمی مانند Arrow ایجاد شده اند.
در این راهنما، ما نگاهی به روش ایجاد و تجزیه اشیاء datetime در آن خواهیم داشت دلورین – یک کتابخانه ساخته شده بر روی پیتز که کتابخانه استاندارد برای حل مسائل مربوط به مناطق زمانی است و 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 Delorean
کلاس اصلی که با آن کار خواهیم کرد، که همه را نشان می دهد زمان قرار اشیاء است Delorean()
کلاس بریم جلو و import آن را از delorean
ماژول، و نمونه سازی یک شی datetime:
from delorean import Delorean
dt_tm = Delorean()
print("Datetime: ", dt_tm)
پس از اجرای کد، باید موارد زیر را مشاهده کنید روی شما terminal/خط فرمان:
Datetime: Delorean(datetime=datetime.datetime(2021, 7, 11, 18, 40, 43, 760187), timezone='UTC')
طبق معمول، این یک است لفاف برای استاندارد datetime
شی، که در داخل قرار دارد Delorean
شی اختصاص داده شده به آن منطقه زمانی پیش فرض است 'UTC'
با این حال، میتوانید به راحتی این مورد را با تعریف منطقه زمانی در حین نمونهبرداری از شی تغییر دهید یا توسط تغییر زمان به منطقه زمانی متفاوت.
از آنجایی که تجزیه خروجی توسط انسان کمی سخت است – منطقی است استخراج کردن برخی از داده ها از wrapper برای سهولت در تفسیر. در حالی که سلسله مراتب نزولی زمان مشخص است – گذر از آن و تجزیه آن با چشمانمان خیلی طول می کشد. بیایید بگیریم date
از این شی و print فقط آن:
from delorean import Delorean
dt_tm = Delorean()
dt = Delorean().date
print("Date: ", dt)
این نتیجه در:
Date: 2021-07-11
اگر فقط به زمان علاقه دارید، بدون توجه به خود تاریخ، می توانید هر دو را دریافت کنید از منطقه زمانی آگاه است زمان، و همچنین منطقه زمانی ساده زمان نسبتاً آسان:
from delorean import Delorean
dt_tm = Delorean()
tm = dt_tm.datetime.time()
print("Timezone-aware time: ", tm)
naive_dt_tm = dt_tm.naive
print("Timezone-naive datetime: ", naive_dt_tm)
این نتیجه در:
Timezone-aware time: 18:40:21.235708
Timezone-naive datetime: 2021-07-11 18:40:21.235708
برای تغییر منطقه زمانی، یا آن را به فراخوان سازنده عرضه می کنیم، یا تغییر مکان زمان:
from delorean import Delorean
dt_tm = Delorean(timezone='Europe/Paris')
print("Datetime Object: ", dt_tm)
print("Time: ", dt_tm.datetime.time())
dt_tm.shift('US/Pacific')
print("Shifted time: ", dt_tm.datetime.time())
Datetime Object: Delorean(datetime=datetime.datetime(2021, 7, 11, 20, 43, 26, 990117), timezone='Europe/Paris')
Time: 20:43:26.990117
Shifted time: 11:43:26.990117
برای نگاهی به تمام مناطق زمانی موجود، از زمانی که Delorean استفاده می کند pytz
زیر کاپوت – ما به سادگی می توانیم print آنها را بیرون می آورند:
import pytz
timezones = pytz.all_timezones
num = len(timezones)
print(f"There are {num} timezones: \n")
for tz in pytz.all_timezones:
print(tz)
که منجر به:
There are 593 timezones:
Africa/Abidjan
Africa/Accra
...
US/Michigan
US/Mountain
UTC
Universal
W-SU
WET
Zulu
تبدیل رشته به Delorean Datetime Object
هیچ کتابخانه ای بدون توانایی تجزیه رشته ها به اشیاء زمان تاریخ کامل نخواهد بود. Delorean با قالب های رشته ای همه کاره است و فرض می کند که اگر ابهامی در رشته تجزیه شده وجود داشته باشد، روز اول می شود. را parse()
متد برای تجزیه یک رشته استفاده می شود و به صورت اختیاری اطلاعات منطقه زمانی را می پذیرد – در غیر این صورت، 'UTC'
فرض بر این است:
import delorean
datetime_strings = ("Mon May 12 2021 00:01:02",
"25-12-2021", "8/6/2019",
"15-12-1987 7:00:32",
"June 5th, 2021",
"5th of April, 2012",
"Thu 13 of July")
for date in datetime_strings:
delorean_object = delorean.parse(date)
print(delorean_object)
اجرای این کد نتیجه می دهد:
Delorean(datetime=datetime.datetime(2021, 5, 12, 0, 1, 2), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 12, 25, 0, 0), timezone='UTC')
Delorean(datetime=datetime.datetime(2019, 6, 8, 0, 0), timezone='UTC')
Delorean(datetime=datetime.datetime(1987, 12, 15, 7, 0, 32), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 6, 5, 0, 0), timezone='UTC')
Delorean(datetime=datetime.datetime(2012, 4, 5, 0, 0), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 7, 13, 0, 0), timezone='UTC')
شما می توانید متوجه شوید که چگونه در مورد مبهم از 8/6/2019
، فرض بر این بود که روز اول می آید، بنابراین به جای 6 آگوست به عنوان 8 ژوئن تجزیه شد. همچنین، از آنجایی که ما سال تاریخ نهایی را ارائه نکردیم – به طور خودکار به سال جاری اختصاص داده می شود.
اگر میخواهید این رفتار را تغییر دهید، میتوانید آن را تنظیم کنید dayfirst
استدلال به False
. علاوه بر این، شما همچنین می توانید تنظیم کنید yearfirst
استدلال به True
، که است False
به طور پیش فرض، در این صورت، اولین مقدار مورد انتظار مقدار خواهد بود سال:
delorean_object = delorean.parse("8/6/2019", dayfirst=False)
print(delorean_object)
این نتیجه در:
Delorean(datetime=datetime.datetime(2019, 8, 6, 0, 0), timezone='UTC')
مهر زمانی دوره به شی دلور
از آنجایی که تمام کامپیوترهای مدرن استفاده از زمان یونیکس، همچنین به عنوان شناخته شده است زمان دوران – نیازی به گفتن نیست که می توانیم یک مهر زمانی UNIX/Epoch را به یک شی دلور تبدیل کنیم. این مکانیسم اساسی است که به هر حال امکان کار با زمان را فراهم می کند. برای تبدیل یک مهر زمانی یونیکس به یک شیء datetime Delorean، از عبارت استفاده می کنیم epoch()
روش از delorean
مدول:
import delorean
timestamp = 3141592653
delorean_object = delorean.epoch(timestamp)
print(delorean_object)
ما به طور نامحسوسی از 10 رقم اولیه Pi برای ایجاد یک مهر زمانی در آینده استفاده کردهایم که در نتیجه زمانی بسیار فراتر از این راهنما است:
Delorean(datetime=datetime.datetime(2069, 7, 21, 0, 37, 33), timezone='UTC')
ایجاد دنباله ای از تاریخ ها
یک راه عالی برای تولید دنباله ای از اشیاء دلور از طریق stops()
ژنراتور می توانید تولید کنید ن تاریخ هایی که از یک الگو پیروی می کنند، مانند هر سه شنبه، یا هر ساعت یا هر 10 هفته. به عنوان مثال، این برای ایجاد برنامه های پرداخت ماهانه یا محاسبه برنامه های بازگشت سرمایه مفید است.
با استفاده از این روش، می توانید یک سری تاریخ نیز تولید کنید روی که باید اتفاق بیفتد، مانند اجرای یک اسکریپت هر هفته در همان زمان، برای جمع آوری داده ها از یک برنامه کاربردی برای تجمیع. اگرچه، شما همچنین می توانید از آن استفاده کنید python-کتابخانه crontab برای آن، یا ابزار اساسی crontab utility به جای آن.
را stops()
ژنراتور a freq
آرگومان، نشان دهنده بسامد، الف timezone
و الف count
، نشان می دهد که چه تعداد تاریخ باید ایجاد کند. فرکانس را می توان روی هر ثابت دلور معتبر تنظیم کرد – SECONDLY
، MINUTELY
، HOURLY
، DAILY
، WEEKLY
، MONTHLY
یا YEARLY
:
import delorean
for stop in delorean.stops(freq=delorean.HOURLY, timezone='UTC', count=10):
print(stop)
این یک دنباله از اشیاء datetime را به دنبال این الگو ایجاد می کند:
Delorean(datetime=datetime.datetime(2021, 7, 12, 13, 35, 12), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 7, 12, 14, 35, 12), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 7, 12, 15, 35, 12), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 7, 12, 16, 35, 12), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 7, 12, 17, 35, 12), timezone='UTC')
اگر مطمئن نیستید که چه تعداد شیء تاریخ را می خواهید دقیقا اما یک تاریخ هدف را در ذهن داشته باشید، همچنین می توانید آن را روی حلقه تنظیم کنید تا زمان تاریخ مشخصی رخ می دهد:
import delorean
dt1 = delorean.Delorean().naive
dt2 = delorean.Delorean(datetime=datetime.datetime(2022, 1, 1), timezone='UTC').naive
for stop in delorean.stops(freq=delorean.MONTHLY, start=dt1, stop=dt2):
print(stop)
توجه داشته باشید: را stops()
روش فقط می پذیرد منطقه زمانی ساده نمونه های تاریخ برای start
و stop
آرگومان ها و برمی گرداند از منطقه زمانی آگاه است تاریخ. اما آن را نیز نیاز دارد الف را مشخص کنید timezone
هنگام نمونه سازی a Delorean
به عنوان مثال با استفاده از سازنده چیزی که برای ما باقی مانده است – تعریف الف است timezone
به عنوان مثال، و سپس با استفاده از naive
تاریخ برای هر دو در عوض.
اجرای این کد به ما یک تاریخ برای هر ماه تا رسیدن به اول ژانویه 2022 می دهد:
Delorean(datetime=datetime.datetime(2021, 7, 12, 13, 46, 1), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 8, 12, 13, 46, 1), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 9, 12, 13, 46, 1), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 10, 12, 13, 46, 1), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 11, 12, 13, 46, 1), timezone='UTC')
Delorean(datetime=datetime.datetime(2021, 12, 12, 13, 46, 1), timezone='UTC')
نتیجه
در این راهنما، نگاهی به روش ایجاد و تجزیه اشیاء دلور در پایتون انداخته ایم. ما روش تبدیل یک رشته به تاریخ در قالبهای مختلف، روش تبدیل یک مهر زمانی به تاریخ و روش ایجاد یک دنباله از تاریخها با استفاده از stops()
ژنراتور
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-09 19:14:04