1. Zaman intervallarına giriş
Böyük Albert Eynşteyn dediyi kimi, zaman nisbidir, amma Python-dakı timedelta
ilə o tam idarəolunan bir şeyə çevrilir. Hazır olun, zaman toplama və çıxma sənətini öyrənəcəksiniz ki, skriptləriniz İsveçrə saatları qədər dəqiq olsun.
Zaman intervalları ilə iş - təkcə bir bacarıq deyil, həm də kodunuzda zamanı idarə etmək sənətidir. Zaman intervalları bizə tarix və zaman obyektləri ilə toplama və çıxma əməliyyatları aparmağa imkan verir, bu isə avtomatlaşdırılmış tapşırıqlarda, məsələn, cədvəllərdə çox faydalıdır. Beləliklə, əgər bir gün kodunuzu real zaman hadisələrinə uyğunlaşdırmağı düşünmüsünüzsə, timedelta
dünyasına xoş gəlmisiniz.
Niyə timedelta
?
Təsəvvür edin, bir restorandasınız və yemək sifariş etdiniz, ofisianta deyirsiniz ki, 2 saatdan sonra geri dönəcəksiniz. Eynilə proqramlaşdırmada da - sizdə bir tarix və zaman varsa və onlarla riyazi əməliyyatlar aparırsınızsa, bu həmişə əlavə imkanlara gətirib çıxarır. timedelta
isə məhz bu, kodunuza deməyə imkan verir: "Hey, bura bir-iki gün və bir neçə saat əlavə elə".
2. Python-da timedelta
-dan istifadə
timedelta
-nın əsasları
Python-da datetime
modulu zaman intervallarını təsvir etmək üçün ideal olan timedelta
sinfini təqdim edir. Gəlin timedelta
-nı iş üstündə görək:
from datetime import datetime, timedelta
# Cari tarix və zaman
now = datetime.now()
# 1 günlük zaman intervalları yaratma
one_day = timedelta(days=1)
# Bir gündən sonra tarix və zaman
tomorrow = now + one_day
print(f"Bu gün: {now}")
print(f"Sabah: {tomorrow}")
Gördüyünüz kimi, timedelta
günləri, saatları, dəqiqələri, hətta saniyələri cari zamana asanlıqla əlavə etməyə imkan verir. Bu, tarixlərinizə bir az sehr əlavə etmək kimidir.
Zaman intervallarının çıxarılması
Zaman haqqında danışanda, vacib olan təkcə onu əlavə etmək deyil, həm də çıxarmaqdır. timedelta
ilə iki hadisə arasında nə qədər zaman keçdiyini müəyyən edə bilərsiniz:
# Hadisə tarixi
event_date = datetime(2023, 10, 15)
# Hadisədən yeddi gün əvvəlki tarix
seven_days_ago = event_date - timedelta(days=7)
print(f"Hadisədən yeddi gün əvvəl: {seven_days_ago}")
Bu, məhz sizin tapşırıqlarınızın zaman və məkan içində olması üçün lazım olan sehirdir.
3. Vaxt intervallarının avtomatlaşdırma üçün real ssenarilərdə tətbiqi
Tapşırıqların cədvəli
Artıq vaxt intervallarını manipulyasiya etmə təməllərini öyrəndik, gəlin tapşırıqların cədvəlini avtomatlaşdırmağın necə mümkün olduğunu nəzərdən keçirək. Cədvəl avtomatlaşdırılması məlumatların toplanması, ehtiyat nüsxələri və ya hesabatlar kimi skriptlərin mütəmadi işə salınması üçün faydalı ola bilər.
Sadə bir cədvəl yaradacağıq
Ssenarini nəzərdən keçirək, burada istəyirsiniz ki, tapşırığınız hər gün müəyyən vaxtda işə salınsın. Bunun üçün datetime
və timedelta
-dan istifadə edərək növbəti işə salınma vaxtını hesablaya bilərsiniz:
from datetime import datetime, timedelta
import time
# Hədəf işə salınma vaxtını hər gün 18:00 olaraq təyin edirik
target_time = datetime.now().replace(hour=18, minute=0, second=0, microsecond=0)
while True:
now = datetime.now()
# Hadisə vaxtının gəldiyini yoxlayırıq
if now >= target_time:
# Burada tapşırığınızı yerinə yetirirsiniz
print("Tapşırığı yerinə yetirmək vaxtıdır!")
# İşə salınmanı növbəti günə saat 18:00-a keçiririk
target_time += timedelta(days=1)
else:
# Növbəti işə salınma vaxtına qədər olan müddəti hesablayırıq və uzun fasilə veririk
time_to_sleep = (target_time - now).total_seconds()
print(f"Növbəti işə salınma {time_to_sleep/60:.2f} dəqiqədən sonra")
time.sleep(time_to_sleep)
Növbəti hadisəyə qədər olan vaxtın hesablanması
Vaxt intervallarının başqa bir ümumi tətbiqi növbəti hadisəyə qədər olan vaxtın hesablanmasıdır, məsələn, müdürün ad gününə qədər (onu təbrik etməyi unutmayın ki, mükafatdan məhrum olmayasınız):
# Növbəti hadisənin tarixi (Müdürün ad günü)
birthday = datetime(year=2023, month=12, day=25)
# Ad gününə qədər qalan vaxtın hesablanması
remaining_time = birthday - datetime.now()
print(f"Müdürün ad gününə qədər qaldı: {remaining_time.days} gün və {remaining_time.seconds // 3600} saat.")
4. Praktiki aspektlər və qarşısını almaq lazım olan səhvlər
datetime
və timedelta
ilə işləyərkən bəzən qarşısını almaq lazım olan situasiyalar və səhvlər yarana bilər.
Zaman zonalarının nəzərə alınması
Ən çox rast gəlinən səhvlərdən biri zaman zonalarının nəzərə alınmamasıdır. datetime
standart olaraq lokal vaxtla işləyir, lakin zaman zonalarına nəzarət etmək üçün pytz
kimi xarici modullardan istifadə etmək olar.
Zamanla işləyərkən səhv emalı
Zaman intervalları ilə proqramlaşdırma zamanı həmişə səhvlərin düzgün emalını unutmayın. Məsələn, əgər kodunuz başqa bir zaman zonasına aid serverdə işləyirsə və ya serveriniz zaman zonaları ilə bağlı problemlərlə üzləşirsə, belə halları həmişə nəzərə alın və kodunuzu müxtəlif şəraitlərdə sınaqdan keçirin.
GO TO FULL VERSION