Mac’inizdeki bir UTC zaman damgasından tam saat sayısını çıkarmak için zaman damgasını UTC ofsetiyle ayrıştırın, bir süre çıkarın ve çıktıyı açıkça UTC olarak biçimlendirin. Bu Terminal iş akışı Python kullanır ve yapay bir yayın tarihi örneği verir.

Buradaki görev açık: hem girdiyi hem çıktıyı UTC’de tutarak bir yayın zaman damgasını negatif olmayan tam saat sayısı kadar geriye almak. Örneğin, 2026-05-12T02:30:00Z değerinden yedi saat çıkarıldığında 2026-05-11T19:30:00Z elde edilir.

“Tam” ifadesi, Python’ın belgelenmiş datetime modelini temel alır: bir saat 3.600 saniyedir ve artık saniyeler temsil edilmez. Bu nedenle bu iş akışı sıradan yayın zaman damgaları için uygundur; artık saniyeleri hesaba katması gereken hesaplamalar farklı bir zaman modeli gerektirir. Python datetime belgeleri

Hangi tür tarihle başlıyorsunuz?

Hesaplamadan önce takvim tarihiyle zaman damgasını birbirinden ayırın. 2026-05-12 gibi bir tarih, yayının ne zaman gerçekleştiğini belirtmez. Gece yarısını eklemek veya Mac’inizin yerel saat dilimini varsaymak, girdinin sağlamadığı bilgileri eklemek olur.

Kavram Yapay örnek Belirttiği bilgi
Takvim tarihi 2026-05-12 Saat veya ofset içermeyen bir takvim günü
Yerel tarih ve saat 2026-05-12T02:30:00 Bir anı belirlemek için yeterli bağlamı olmayan saat alanları
UTC olarak ifade edilen an 2026-05-12T02:30:00Z Zamanın belirli bir noktası
Sayısal ofset +00:00 UTC’den belirtilen fark
Adlandırılmış saat dilimi Europe/Paris Yerel saat okumalarını UTC ile ilişkilendirme kuralları

Ofset ve adlandırılmış saat dilimi farklı amaçlara hizmet eder. Sayısal ofset, zaman damgasının UTC ile ilişkisini belirtir; adlandırılmış saat dilimi ise tarihe göre değişebilen kurallar sağlar. RFC 9557 bu ayrımları tanımlar ve bazı yerel saat okumalarının neden sıfır ya da birden fazla ana karşılık gelebileceğini açıklar. RFC 9557, tanımlar

Bu görev için tam bir zaman damgası kullanın. Aşağıdaki program büyük harfli T, saniye, isteğe bağlı olarak bir ila altı basamaklı kesirli saniye ve Z ya da +00:00 kabul eder. Bu, zaman damgası dilbilgisi başka ofsetlere ve daha fazla kesir basamağına da izin veren RFC 3339’un özellikle sınırlandırılmış bir alt kümesidir. RFC 3339, tarih/saat biçimi

Terminal’de saatleri nasıl çıkarırsınız?

Mac’inizde Python’ı hazırlayın

Finder’ı açın, /Applications/Utilities konumuna gidin ve Terminal’e çift tıklayın. Apple, komut satırı uygulamasını açmanın bir yolu olarak bunu belgeler. Mac’te Terminal’i açma veya kapatma

Bu komutu girip Return tuşuna basın:

python3 --version

Bu anlatım için Python 3.11 veya daha yenisini kullanın. Uygun bir yorumlayıcı mevcut değilse resmi macOS kurulum talimatlarını izleyin: bağlantısı verilen macOS indirme sayfasından desteklenen bir Python yükleyicisi edinin, .pkg dosyasını açın ve belgelenen kurulum adımlarını tamamlayın. Ardından yeni bir Terminal penceresi açıp sürümü yeniden kontrol edin. Python belgeleri hem kurulumu hem de Python’ı kabuktan çalıştırmayı açıklar. macOS’ta Python kullanımı

Hesaplamanın tamamını çalıştırın

Aşağıdaki bloğun ilk ve son satırları dahil tamamını Terminal’e kopyalayın, ardından Return tuşuna basın. Başka bir hesaplama için yapıştırmadan önce yalnızca source_timestamp ve hours_to_subtract değerlerini değiştirin. Zaman damgasını tırnak işaretleri içinde tutun ve saatleri tam sayı olarak girin.

python3 - <<'PY'
import re
from datetime import datetime, timedelta, timezone

source_timestamp = "2026-05-12T02:30:00Z"
hours_to_subtract = 7

def subtract_utc_hours(text, hours):
    if type(hours) is not int or hours < 0:
        raise ValueError("Hours must be a non-negative whole number.")

    match = re.fullmatch(
        r"[0-9]{4}-[0-9]{2}-[0-9]{2}T"
        r"[0-9]{2}:[0-9]{2}:[0-9]{2}"
        r"(?P<fraction>\.[0-9]{1,6})?(?:Z|\+00:00)",
        text,
    )
    if match is None:
        raise ValueError(
            "Use YYYY-MM-DDTHH:MM:SS, optionally .ffffff, "
            "ending in Z or +00:00."
        )

    normalized = text[:-1] + "+00:00" if text.endswith("Z") else text
    start = datetime.fromisoformat(normalized).astimezone(timezone.utc)
    try:
        result = start - timedelta(hours=hours)
    except OverflowError as exc:
        raise ValueError(
            "The duration or result is outside the supported range."
        ) from exc

    # Whole-hour subtraction leaves the fractional second unchanged.
    seconds_text = result.isoformat(timespec="seconds")
    return seconds_text[:-6] + (match.group("fraction") or "") + "Z"

try:
    print(subtract_utc_hours(source_timestamp, hours_to_subtract))
except ValueError as exc:
    raise SystemExit(f"Cannot subtract: {exc}")
PY

Verilen yapay yayın zaman damgası için çıktı şöyledir:

2026-05-11T19:30:00Z

Bu, Python’ın standart kitaplığını kullanan eksiksiz bir programdır. Dosya oluşturmadan hesaplanan zaman damgasını yazdırır. Sonucu hazırladığınız yayın tarihi alanına veya belgeye kopyalayın.

API sırası datetime.fromisoformat(), timezone.utc biçimine dönüştürme, timedelta(hours=hours) çıkarma ve isoformat() üzerinden çıktı verme adımlarından oluşur. Python bu ayrıştırma, saat dilimi, süre ve biçimlendirme işlemlerini belgeler. Python datetime API’leri

Program UTC’yi ve kesirli saniyeleri nasıl koruyor?

Girdi denetimi, açık bir UTC gösterimi gerektirir. Ofset içermeyen bir zaman damgası hemen reddedilir; dolayısıyla programın Mac ayarlarınızdan saat dilimi çıkarsaması gerekmez. Kabul edilen her iki son ek de sıfır ofsetli zaman damgaları olarak ayrıştırılır ve çıktı tutarlı biçimde Z kullanılarak yazılır.

UTC’yi korumak, özgün dizgedeki her karakteri korumak anlamına gelmez. +00:00 ile biten bir girdi, sonunda Z olacak şekilde döner. Sonuç UTC gösterimini korurken tarih ve saat istenen süre kadar geriye alınır.

Program ayrıca verilen kesirli saniye metnini de korur. Tam saat çıkarmak bu kesri değiştirmez; bu nedenle .120, .12 değerine dönüşmek veya kaybolmak yerine .120 olarak kalır. Altıdan fazla kesir basamağı içeren girdiler kısaltılmak yerine reddedilir.

Burada standartlarla ilgili önemli bir ayrıntı vardır: Z sıfır UTC ofsetini belirtir, ancak başlangıç konumunun saat dilimini belirlemez. RFC 9557, RFC 3339’un Z yorumunu güncelleyerek yerel ofsetin bilinmiyor olmasına izin verir. Bu program tasarım gereği Z ve +00:00 değerlerini kabul eder; girdi politikası gereği -00:00 değerini reddeder. RFC 9557, RFC 3339 güncellemesi

Sonucu kullanmadan önce nasıl kontrol edebilirsiniz?

Gece yarısını aşan bir hesaplamayla başlayın. Ana örnekte iki saat geriye gidince 12 Mayıs’ta 00:30:00 elde edilir; beş saat daha geriye gidince 11 Mayıs’ta 19:30:00 elde edilir. Sonuç 12 Mayıs’ta kalıyorsa yanlıştır.

Bu yapay örnekler ek kontroller sağlar. Her satırdaki sonucu elde etmek için tam programdaki iki girdi değerini değiştirin.

UTC girdisi Çıkarılan saat Beklenen UTC çıktısı
2026-05-12T02:30:00Z 7 2026-05-11T19:30:00Z
2026-01-01T00:15:00+00:00 1 2025-12-31T23:15:00Z
2028-03-01T00:30:00Z 1 2028-02-29T23:30:00Z
2026-05-12T02:30:00.120Z 7 2026-05-11T19:30:00.120Z
2026-05-12T02:30:00Z 0 2026-05-12T02:30:00Z

Ana örnekte süre, yedi çarpı 3.600, yani 25.200 saniyedir. İstenen süre yalnızca tam saatlerden oluştuğu için dakika ve saniyeler değişmeden kalır. Tarih gece yarısını, ay veya yıl sınırını geçebilir.

Girdi reddedildiğinde ne yapmalısınız?

Reddedilmeyi tanı koymaya yardımcı bir adım olarak kullanın. Yeniden denemeden önce eksik bilgiyi veya desteklenmeyen hassasiyeti giderin.

  • Yalnızca tarih mevcut: Amaçlanan yayın saatini ve ofsetini öğrenin. Tek başına takvim tarihi, başlangıç anını belirleyemez.
  • Zaman damgasında ofset yok: Son ek eklemeden önce bunun UTC’yi mi yoksa yerel saati mi temsil ettiğini doğrulayın.
  • Zaman damgasının ofseti sıfırdan farklı: Önce temsil edilen anı UTC’ye dönüştürün. Yalnızca son eki değiştirmek anlamı değiştirir.
  • Kesirli basamak sayısı altıdan fazla: Bu hassasiyeti koruyan bir araç kullanın veya bu iş akışını kullanmadan önce açık bir yuvarlama politikası belirleyin.
  • Saatler negatif veya kesirli: Negatif olmayan bir tam sayı girin. Bu program özellikle tam saat çıkarmak için tasarlanmıştır.
  • Takvim alanları geçersiz: Kaynak değeri düzeltin. 30 Şubat gibi olanaksız bir tarih reddedilir.

Python, 1 ile 9999 arasındaki datetime yıllarını destekler; bu aralığın dışına taşan çıkarma işlemleri başarısız olur. Ayrıca datetime modeli, RFC 3339’un belirtilen koşullarda artık saniye için izin verdiği 60 saniye alanını da reddeder. Python datetime sınırları, RFC 3339, kısıtlamalar

Gerçek gereksiniminiz “önceki gündeki aynı yerel saat” ise adlandırılmış saat dilimi kullanan bir takvim iş akışı kullanın. Adlandırılmış saat dilimlerinin ofsetleri yaz saati uygulaması geçişlerinde değişebileceğinden, bu görev geçen 24 saati çıkarmaktan farklı olabilir. Python’ın zoneinfo belgeleri bu tür geçişler sırasında yapılan aritmetiği gösterir. Python IANA saat dilimi desteği

UTC olarak zaten ifade edilmiş bir yayın zaman damgasında işlemi basit tutun: girdiyi doğrulayın, tam saat süresini çıkarın ve kopyaladığınız değerde açık UTC son ekini koruyun. Sonucu kullanmadan önce tarih sınırını ve kesir hassasiyetini kontrol edin.

Kaynaklar