0Pricing
SQL Academy · Ders

Saat Dilimleri: TIMESTAMP ve TIMESTAMPTZ

TIMESTAMP ile TIMESTAMPTZ arasındaki farkı anlayın, AT TIME ZONE ile dönüştürün ve taşınabilir uygulamalar için UTC kullanın.

Saat Dilimleri: TIMESTAMP ve TIMESTAMPTZ, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.

İki TIMESTAMP Türü

PostgreSQL'de TWO TIMESTAMP türü vardır:

  • TIMESTAMP — "saf" zaman damgası, ZONE bilgisi yok
  • TIMESTAMPTZ — ZONE içeren zaman damgası (dahili olarak UTC biçiminde saklanır)

Genel kural: olaylar için TIMESTAMPTZ; "9:00 AM çalışma saatleri" gibi tamamen soyut zamanlar için TIMESTAMP tercih edin.

TIMESTAMPTZ Nasıl Çalışır

Dahili olarak her zaman UTC biçiminde saklanır. INSERT sırasında girdiniz, oturumun TZ değerinden UTC'ye dönüştürülür. SELECT sırasında çıktı, oturumun TZ değerine geri dönüştürülür.

SET TIME ZONE 'Europe/Berlin';
INSERT INTO events (ts) VALUES ('2024-03-15 12:00:00');
-- stored as 2024-03-15 11:00:00 UTC (Berlin is UTC+1 in winter)

SET TIME ZONE 'UTC';
SELECT ts FROM events;
-- 2024-03-15 11:00:00+00

TIMESTAMP Bilgi Kaybına Uğrar

Düz bir TIMESTAMP, ZONE bilgisini bilmez. "2024-03-15 12:00:00" herhangi bir yerel zamanı ifade edebilir. Kullanıcılar ZONE değiştirdiğinde anlam kaybolur.

AT TIME ZONE

Görüntüleme için ZONE'lar arasında dönüştürün:

SELECT ts AT TIME ZONE 'America/New_York' AS ny_time FROM events;
SELECT ts AT TIME ZONE 'Asia/Tokyo'        AS tokyo_time FROM events;

UTC Olarak Saklama ve Yerel Olarak Görüntüleme

En iyi uygulama: TIMESTAMPTZ saklayın, SELECT içinde kullanıcının ZONE'una dönüştürün; tersini asla yapmayın.

SELECT id,
       ts AT TIME ZONE COALESCE(u.tz, 'UTC') AS local_ts
FROM events e
JOIN users u ON u.id = e.user_id;

SESSION TIME ZONE

Bunu oturum, kullanıcı veya genel düzeyde ayarlayabilirsiniz:

-- Session:
SET TIME ZONE 'Europe/Berlin';

-- Per-user (PG):
ALTER ROLE alice SET timezone TO 'Europe/Berlin';

-- Server default in postgresql.conf:
-- timezone = 'UTC'

SUPPLY ZONE WITH LITERAL

LITERAL içine bir ZONE ekleyin:

SELECT TIMESTAMPTZ '2024-03-15 12:00:00 Europe/Berlin';
SELECT '2024-03-15 12:00:00+02'::TIMESTAMPTZ;

NOW() TIMESTAMPTZ Döndürür

NOW() ve CURRENT_TIMESTAMP her zaman TIMESTAMPTZ döndürür. Bunları TIMESTAMP sütunlarıyla karıştırmak yaygın bir hatadır.

TIMESTAMP (ZONE Yok) Ne Zaman Doğrudur

Gerçekten bir ZONE'a bağlı olmayan soyut veya yerel zamanlar için — "mağaza 09:00'da açılır" — TIMESTAMP (veya TIME) kullanın.

CREATE TABLE store_hours (
  store_id BIGINT,
  open_at  TIME NOT NULL,
  close_at TIME NOT NULL
);

DST Geçişleri

TIMESTAMPTZ, DST'yi otomatik olarak işler. INTERVAL eklemek, DST sınırını geçmediğiniz sürece duvar saatiyle ölçülen saatlerde çalışır — sınırı geçtiğinizde 23 veya 25 saatlik bir kayma oluşabilir.

SELECT TIMESTAMPTZ '2024-03-30 23:00:00 Europe/Berlin' + INTERVAL '5 hours';
-- Result accounts for the DST transition on March 31

Ofsetleri Değil, ZONE Adlarını Saklayın

+02:00 gibi bir ofset, DST'nin ne zaman başladığını belirtmez. Europe/Berlin gibi bir ZONE adı bunu belirtir. Kullanıcının ev ZONE'unu saklarken IANA adını saklayın.

Özet

Olaylar için varsayılan olarak TIMESTAMPTZ kullanın.

  • UTC olarak saklanır, oturum TZ'sinde görüntülenir
  • Görüntüleme için AT TIME ZONE ile dönüştürün
  • ZONE içermeyen soyut yerel zamanlar için yalnızca TIMESTAMP kullanın

Hızlı Kontrol

Kullanıcı olaylarını kaydeden küresel bir SaaS oluşturuyorsunuz. occurred_at sütunu için hangi zaman damgası türünü kullanmalısınız?

Sıkça Sorulan Sorular

“Saat Dilimleri: TIMESTAMP ve TIMESTAMPTZ” dersi ücretsiz mi?

Evet — “Saat Dilimleri: TIMESTAMP ve TIMESTAMPTZ” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.

“Saat Dilimleri: TIMESTAMP ve TIMESTAMPTZ” dersinde ne öğreneceğim?

TIMESTAMP ile TIMESTAMPTZ arasındaki farkı anlayın, AT TIME ZONE ile dönüştürün ve taşınabilir uygulamalar için UTC kullanın. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

SQL Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Saat Dilimleri: TIMESTAMP ve TIMESTAMPTZ” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Tarih Aritmetiği ve INTERVAL
  2. EXTRACT, DATE_TRUNC, AGE
  3. Saat Dilimleri: TIMESTAMP ve TIMESTAMPTZ
  4. Yaygın Tarih Raporları (MTD, WoW, YoY)
← SQL Academy Sayfasına Dön