Anar Rustamli
Avtomatlaşdırma və E-ticarət

ICS mətnini düzəltmək: UTC vaxtını ayrıca yoxlayın

ICS mətnini düzəltmək üçün uydurma faylda UTC və TZID ziddiyyətini ayırın. Orijinalı qoruyun, ayrı nüsxəni saxlayın və iki qurşaq üzrə oxuma qeydini hazırlayın.

Anar RustamliAnar Rustamli7 dəqiqə oxu1.394 söz
ICS mətnini düzəltmək: UTC vaxtını ayrıca yoxlayın - Anar Rustamli

ICS mətnini düzəltmək üçün fayldakı vaxt sahəsini verilmiş görüş niyyəti ilə tutuşdurun. Uydurma ziddiyyətli girişdən ayrıca UTC nüsxəsi və iki adı göstərilən saat qurşağı üzrə lokal oxuma qeydi hazırlayacaqsınız; dəvət göndərilmir.

Bu, yalnız əl ilə mətn düzəlişi, məlum iki UTC sahəsinin vaxt hesabı və saxlanmış mətnin təkrar oxunmasıdır; ICS-aware parser, təqvim idxalı və tam format uyğunluğu yoxlanmır.

ICS mətnini düzəltmək hansı işi həll edir?

ICS mətnini düzəltmək burada bir lokal təqvim faylındakı başlanğıc və son sahələrini əvvəlcədən verilmiş görüş niyyəti ilə tutuşdurmaqdır. Təqvim faylının uzantısı .ics-dir; məzmunu iCalendar formatında ola bilər. Faylın adı və ya görüş başlığı saatın düzgün yazıldığını sübut etmir. Bu məşqdə heç bir təqvim hesabı açılmır və dəvət göndərilmir.

İş vəziyyəti tam uydurmadır: 23 oktyabr 2026-da Bakı vaxtı ilə 10:00–10:30 arası görüş nəzərdə tutulub. Müqayisə üçün ikinci açıq qurşaq Europe/London-dur. Bu niyyət tapşırığın mənbəyidir; səhv faylı oxuyub görüş sahibinin nə istədiyini təxmin etmirik. Niyyət və ya tarix bilinmirsə, düzəliş əvəzinə sual saxlayın.

Nəticəniz orijinalın yanında ayrıca saxlanmış düzəldilmiş ICS və iki qurşaq üzrə oxuma qeydi olacaq. Müəllif bu uydurma kartı mövcud Python mühitində lokal olaraq yazıb yenidən oxuyub. Bu, Anarın müştəri hadisəsi, real dəvət idxalı və ya bütün təqvim proqramlarının uyğunluq sınağı deyil.

Görüşün saat qurşağını dəqiqləşdirmək yazısı qeyri-müəyyən yerli saat üçün cavab almağı izah edir. Burada niyyət artıq verilib; problem saxlanacaq faylın vaxt sahələrindədir. Bu iki işi qarışdırıb naməlum görüş saatını proqramla “düz” seçməyin.

İlkin fayldakı ziddiyyəti necə tapaq?

Aşağıdakı mətn yalnız məşq faylıdır. UID hadisə nişanıdır, email ünvanı və real alıcı deyil. DTSTAMP bu kartın yaradılma vaxtıdır; görüşün başlanğıcı deyil. DTSTART başlanğıcı, DTEND isə sonu göstərir. BEGIN və END sətirləri faylın və hadisənin sərhədlərini ayırır.

Windows-da Start menyusunda Notepad axtarın, açın və yeni boş sənəd yaradın. Mətni olduğu kimi köçürün. File → Save as seçin, öz yeni boş məşq qovluğunuzda practice-original.ics adı ilə saxlayın; fayl növü üçün All files və UTF-8 seçin. Mövcud eyniadlı fayl varsa, üstünə yazmayın. Orijinalı təqvim proqramında açmayın; bu, qəsdən səhv girişdir.

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Practice//Local Time Check//EN
BEGIN:VEVENT
UID:ICS-PRACTICE-041@example.invalid
DTSTAMP:20261021T080000Z
DTSTART;TZID=Asia/Baku:20261023T100000Z
DTEND;TZID=Asia/Baku:20261023T103000Z
SUMMARY:Practice only ICS-041
END:VEVENT
END:VCALENDAR

Hər iki vaxt sətrində həm TZID=Asia/Baku, həm də sonda Z var. RFC 5545 UTC ilə verilmiş vaxt üçün TZID parametrinin işlədilməməsini tələb edir. Z vaxtın UTC olduğunu bildirir, yerli Bakı saatını göstərən əlavə bəzək deyil. Bu birləşməyə baxıb hansı proqramın hansı hissəni üstün tutacağını fərz etmək olmaz.

Tam fayl uzantısını yoxlamaq qaydasını tətbiq edin: ad practice-original.ics.txt olmamalıdır. Adın düzgün olması formatın düzgünlüyü deyil; yalnız hansı lokal faylı müqayisə etdiyinizi aydınlaşdırır. Bu kart təkrarlanan görüş, əlavə, iştirakçı və xatırlatma daşımır.

Niyə 10:00 əvəzinə 06:00Z yazılır?

Verilmiş niyyət 23 oktyabrda Asia/Baku üzrə 10:00-dır. Mövcud saat qurşağı məlumatında həmin tarixdə fərq +04:00 olur. UTC başlanğıcı 10:00-dan dörd saat çıxmaqla 06:00 alınır. Son 10:30 üçün 06:30 UTC-dir. Müddət otuz dəqiqədir; sadəcə hər iki sətirdən TZID-ni silib 10:00Z saxlamaq niyyəti dəyişər.

Düzəliş yolunu tək seçirik: hər iki görüş vaxtını UTC ilə yazmaq və bu iki sətirdən TZID-ni çıxarmaq. Yerli saatlı alternativ fayl, VTIMEZONE bölməsi və yay vaxtı qaydasını əl ilə qurmaq bu məşqə daxil deyil. Heç bir başqa sahəni dəyişməyin, yeni iştirakçı və METHOD:REQUEST əlavə etməyin.

Notepad-də yeni boş sənəd yaradın və aşağıdakı nəticəni köçürün. File → Save as ilə eyni məşq qovluğunda practice-corrected.ics adı seçin, All files və UTF-8 saxlayın. Orijinal faylı başqa ad altında göstərib üstünə yazmaq olmaz. practice-corrected.ics adı artıq varsa, dayanın; yeni boş məşq qovluğunda hər iki faylı göstərilən adlarla yenidən yaradın. Kod başqa fayl adını avtomatik tapmır.

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Practice//Local Time Check//EN
BEGIN:VEVENT
UID:ICS-PRACTICE-041@example.invalid
DTSTAMP:20261021T080000Z
DTSTART:20261023T060000Z
DTEND:20261023T063000Z
SUMMARY:Practice only ICS-041
END:VEVENT
END:VCALENDAR

Başlanğıc 20261023T060000Z, son 20261023T063000Z olmalıdır. İlk sətirdə tarix, T-dən sonra saat-dəqiqə-saniyə, sonda Z görünür. UTC gün sərhədi kartı başqa nəticə verir: hadisənin hesabat gününə daxil olması. Burada isə saxlanmış görüşün eyni anını qoruyuruq.

İki adı göstərilən saat qurşağında hansı nəticə alınır?

Düzəldilmiş fayl UTC vaxtını saxlayır; cədvəldəki iki yerli görünüş eyni anın təqdimatıdır. London üçün tarix vacibdir: bu nümunə 23 oktyabra aiddir, təkrarlanan saatın olduğu başqa günə deyil. Europe/London fərqini sabit “həmişə bir saat” qaydasına çevirməyin. Asia/Baku da sadəcə başlıq deyil, işlənən məlumat bazasında ayrıca qurşaq açarıdır.

Yoxlama / CheckBaşlanğıc / StartSon / End
UTC2026-10-23 06:00 +00:002026-10-23 06:30 +00:00
Asia/Baku2026-10-23 10:00 +04:002026-10-23 10:30 +04:00
Europe/London2026-10-23 07:00 +01:002026-10-23 07:30 +01:00

Bu nəticələri eyni günün istənilən London görüşünə və ya başqa tarixə kor-koranə köçürməyin. Saat qurşağı məlumat bazasının versiyası real gələcək dəyişikliklərdən təsirlənə bilər. Məşqdə mövcud runtime həmin tarixlər üçün bu nəticələri verib; proqramınızdakı təsdiqlənməmiş görünüşə zəmanət yoxdur.

Əgər fayl 10:00Z olaraq qalsaydı, bu, verilmiş Bakı 10:00 niyyətinə uyğun gəlməzdi. Amma ilkin ziddiyyətli fayl üçün “mütləq bu saatda açılacaq” demirik. Səhv sintaksisin proqramdan-proqrama davranışı burada sınaqdan keçirilməyib. Düzgün iş qeydi əvvəlcə ziddiyyəti, sonra niyyətə əsasən seçilmiş UTC sətirlərini ayırır.

Sənəd versiyası yoxlamasında olduğu kimi, dəyişmiş nüsxə orijinalın tarixçəsini silmir. Düzəliş edilmiş faylın mövcudluğu görüş sahibinin təsdiqi deyil; bu kartda sahibin niyyəti yalnız verilmiş tədris girişidir.

Saxlanmış faylı mövcud Python ilə necə oxuyaq?

Bu hissə yalnız əvvəlcədən işlək Python 3.9 və ya daha yeni mühit, zoneinfo məlumatı və terminaldan istifadə imkanı olan oxucu üçündür. Quraşdırma, paket yükləməsi və administrator dəyişiklikləri yoxdur. Bunlar yoxdursa, nəticəni əl ilə cədvəllə tutuşdurub runtime hissəsini NOTRUN saxlayın; yerinə real təqvimə idxal etməyin.

Mövcud terminalı məşq qovluğunda açın. Notepad-də yeni sənədə aşağıdakı kodu yazın. File → Save as ilə məşq qovluğunda check_ics.py adı, All files növü və UTF-8 seçin; ad artıq varsa, dayanın. Tam adın check_ics.py.txt olmadığını yoxlayın və həmin qovluqda python check_ics.py işlədin. Sisteminizdə təsdiqlənmiş Python əmri fərqlidirsə, yalnız bildiyiniz mövcud əmrdən istifadə edin. Əmr və ya qurşaq tapılmırsa, dayanın; internetdən yeni proqram quraşdırmaq bu məşqin addımı deyil.

from datetime import datetime, timezone
from zoneinfo import ZoneInfo
from pathlib import Path
raw = Path("practice-corrected.ics").read_text(encoding="utf-8")
fields = {}
for line in raw.splitlines():
    if line.startswith(("DTSTART:", "DTEND:")):
        key, value = line.split(":", 1)
        fields[key] = datetime.strptime(value, "%Y%m%dT%H%M%SZ").replace(tzinfo=timezone.utc)
for zone in ("Asia/Baku", "Europe/London"):
    print(zone, fields["DTSTART"].astimezone(ZoneInfo(zone)).isoformat(),
          fields["DTEND"].astimezone(ZoneInfo(zone)).isoformat())
print("minutes", (fields["DTEND"] - fields["DTSTART"]).total_seconds() / 60)

Gözlənilən nəticə cədvəldəki Bakı 10:00–10:30, London 07:00–07:30 və minutes 30.0-dır. Kod məhz saxlanmış practice-corrected.ics faylından iki UTC sətrini oxuyur. Python zoneinfo sənədi adlandırılmış saat qurşaqlarına çevrilməni dəstəkləyir; bu sadə kod tam iCalendar validatoru deyil.

Bu kod təkrarlanma, qatlanmış uzun sətirlər, müxtəlif dəyər növləri və VTIMEZONE təhlili etmir. Başqa faylı “RFC-yə tam uyğundur” elan etmək üçün istifadə etməyin. İş qaydasında da həqiqətən yoxlanmış dar nəticə ilə geniş təsdiqi ayırmaq lazımdır; burada heç bir hesab və ya müştəri məlumatı işlənmir.

Oxuma qeydində nə qalmalıdır?

Notepad-də ayrıca boş qeyd yaradın. Orijinal və düzəldilmiş fayl adını, verilmiş niyyəti, dəyişmiş iki sətri və hər iki qurşağın nəticəsini yazın. Runtime işləməyibsə NOTRUN, işləyib uyğunsuzluq çıxıbsa həmin fərqi olduğu kimi saxlayın. Gözlənilən nəticəni müşahidə sütununa avtomatik köçürməyin.

Ctrl+S basın, məşq qovluğunda ics-readback-V1.txt adını seçib Save edin; ad varsa, əvvəlki qeydi əvəz etmədən yeni versiya adı seçin. Redaktorları bağlayın. File Explorer-də faktiki saxladığınız qeyd faylını Open with → Notepad ilə yenidən açın; niyyət, iki sahə, qurşaq nəticələri və müşahidə/NOTRUN vəziyyətini tutuşdurun. Sonra orijinalı və düzəldilmiş ICS-ni həmin mətn yolu ilə açın: ilkin ziddiyyət qorunub, yeni iki UTC sətri düzgündürmü? İki dəfə vurub təqvim tətbiqini başlatmayın.

Üç qərarı qeydə alın: “Z və TZID eyni vaxt sətrində problemsizdir” rədd edilir; “TZID-ni silmək saat rəqəmlərini həmişə qorumaqdır” rədd edilir; “lokal oxuma keçdi, deməli alıcıya çatdı” rədd edilir. Hər birinin səbəbini format, verilmiş niyyət və əməliyyat sərhədi ilə bağlayın.

On beş dəqiqəlik plan beş dəqiqə mətnə, beşi düzəliş və müqayisəyə, beşi saxlanmış faylın oxunmasına ayrılan təklifdir; ölçülmüş vaxt zəmanəti deyil. Saxlanmış ICS təqvimə əlavə edilməyib, görüş yaradılmayıb, dəvət göndərilməyib. Məxfi məlumat və real kontakt əlavə etmədən bu dar nəticə ilə dayanın.

Tez-tez verilən suallar

İlkin səhv faylı təqvimdə açmalıyam?

Xeyr. Onu mətn kimi saxlayın və yalnız mətn redaktorunda açın. Bu məşqdə real təqvimə idxal və dəvət göndərişi yoxdur.

Yalnız TZID-ni silmək kifayətdir?

Bu nümunədə yox. Verilmiş Bakı 10:00 niyyətini UTC 06:00Z kimi qorumaq üçün saat sahəsi də düzəldilir.

Python kodu tam ICS yoxlayıcısıdır?

Xeyr. Yalnız bu kartın iki UTC sətrini oxuyur və iki qurşağa çevirir. Tam RFC uyğunluğu və bütün proqramlar yoxlanmır.

Lokal yoxlama görüşün təsdiqidir?

Xeyr. Mənbə niyyəti uydurma girişdir; real təşkilatçı, alıcı, idxal və göndəriş yoxlanmayıb.

Mənbələr

Paylaş
Anar Rustamli
Müəllif
Anar Rustamli

Mən Anar Rustamli — böyümənin, texnologiyanın və insan düşüncəsinin kəsişməsində işləyən strateq, sahibkar və AI tətbiqi lideriyəm. 2016-cı ildən işim bizneslərə sürətlə dəyişən rəqəmsal mühitdə inkişaf etməyə kömək etmək üzərində qurulub. Böyümə sistemləri, AI-əsaslı iş axınları və nəticəni məqsədlə uzlaşdıran strateji çərçivələr dizayn edirəm. İnanıram ki, əsl böyümə strategiya, data və insan fəhmi birlikdə işləyəndə baş verir — missiyam bizneslərə AI-ı elə tətbiq etməkdə kömək etməkdir ki, həm nəticələri, həm kimlikləri güclənsin.

Söhbətə başla
Əlaqə

Növbəti sistemi birlikdə quraq.

Söhbətə başla