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

سرور مجازی NVMe

ایجاد و تجزیه Datetime در پایتون با Delorean

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


معرفی

کار با زمان قرار می تواند کمی دلهره آور و چالش برانگیز باشد و مدیریت تاریخ در پایتون نیز از این قاعده مستثنی نیست. پایتون داخلی 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 ژوئن تجزیه شد. همچنین، از آنجایی که ما سال تاریخ نهایی را ارائه نکردیم – به طور خودکار به سال جاری اختصاص داده می شود.

پیشنهاد می‌کنیم بخوانید:  استفاده از حلقه های For و while برای ورودی کاربر در پایتون

اگر می‌خواهید این رفتار را تغییر دهید، می‌توانید آن را تنظیم کنید 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

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

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

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