Ana içeriğe geç

ConvertTimezone

convertTimezone, bir zaman damgasını, zaman damgasından doğru aralığı ekleyerek veya çıkararak belirtilen bir saat dilimine kaydırır.

SözdizimiÖrnek
convertTimezone(sütun, hedef, kaynak)convertTimezone("2022-12-28T12:00:00", "Canada/Pacific", "Canada/Eastern")
Bir zaman damgasını kaynak saat diliminden hedef saat dilimine kaydırır.2022-12-28T09:00:00 değerini döndürür, 28 Aralık 2022 9:00 AM olarak görüntülenir

Zaman damgaları ve saat dilimleriyle çalışmak oldukça zordur (hata yapmak kolaydır ve bunları yakalamak zordur), bu nedenle verilerinizin yorumlanması zamana dayalı kesintilere duyarlıysa, yalnızca convertTimezone kullanmayı denemelisiniz.

Örneğin, zaman içindeki kullanıcı girişlerini izliyorsanız, bazı girişlerin Salı yerine Pazartesi günleri sayılması işinizi farklı şekilde yürütmenize neden olmaz. Ancak, Patrona'yı vergileriniz gibi kesin bir şey yapmak için kullanıyorsanız, 31 Aralık'ta gerçekleşen işlemler ile 1 Ocak'ta gerçekleşen işlemler arasındaki farkı muhtemelen çok daha fazla önemseyeceksiniz (ve hükümet de).

Desteklenen saat dilimleri

Patrona, tz veritabanı saat dilimlerini destekler.

Parametreler

sütun aşağıdakilerden herhangi biri olabilir:

  • Bir zaman damgası sütununun adı,
  • bir zaman damgası döndüren özel bir ifade veya
  • "YYYY-MM-DD veya "YYYY-MM-DDTHH:MM:SS" biçiminde bir dize.

hedef:

  • Sütununuza atamak istediğiniz saat diliminin adı.

kaynak:

  • Sütununuzun geçerli saat diliminin adı.
  • timestamp without time zone veri türüne sahip sütunlar veya ifadeler için gereklidir.
  • timestamp with time zone veri türüne sahip sütunlar veya ifadeler için isteğe bağlıdır.
  • Daha fazla bilgi için Kabul edilen veri türleri bölümüne bakın.

tz veritabanı saat dilimi adlarını (örneğin, "EST" yerine "Canada/Eastern") destekliyoruz.

Özel rapor tarihleri oluşturma

Diyelim ki bir veya daha fazla saat diliminde saklanan bazı zaman serisi verileriniz var (Kaynak Zaman). EST'de yaşayan bir ekip için özel raporlama tarihleri oluşturmak istiyorsunuz.

Kaynak ZamanEkip Rapor Zamanı (EST)
28 Aralık 2022, 10:00:0028 Aralık 2022, 07:00:00
28 Aralık 2022, 21:00:0028 Aralık 2022, 19:00:00
27 Aralık 2022, 08:00:0027 Aralık 2022, 05:00:00

Kaynak Zaman timestamp with time zone veya timestamp with offset olarak saklanıyorsa, yalnızca hedef saat dilimini sağlamanız gerekir:

convertTimezone([Source Time], 'EST')

Kaynak Zaman timestamp without time zone olarak saklanıyorsa, kaynak saat dilimini sağlamanız gerekir (bu, veritabanı saat diliminize bağlı olacaktır):

convertTimezone([Source Time], 'EST', 'UTC')

Genellikle convertTimezone sütunlarını hedef saat diliminin adıyla etiketlemek (veya hedef saat dilimini bir modelin meta verilerine eklemek) iyi bir fikirdir. Birisi kaçınılmaz olarak sayıların neden eşleşmediğini sorduğunda hayatınızı kolaylaştıracağımıza söz veriyoruz.

Beklediğiniz sonuçları alamıyorsanız:

  • Doğru kaynak saat dilimine sahip olup olmadığınızı kontrol edin.
  • Veritabanı yöneticinize timestamp with time zone ve timestamp without time zone hakkında sorun (daha fazla bilgi için Kabul edilen veri türleri bölümüne bakın).

Kaynak saat dilimini seçme

Saat dilimi dönüşümleri yaparken, çalıştığınız kaynak saat dilimini bildiğinizden emin olun. Aynı tablo, soru veya modeldeki farklı sütunlar (ve hatta farklı satırlar) farklı "kaynak" saat dilimlerinde olabilir.

Olası kaynak saat dilimiAçıklamaÖrnek
İstemci saat dilimiBir olayın gerçekleştiği saat dilimi.Bir web analitiği hizmeti, web sitenizi ziyaret eden her kişinin yerel saat diliminde veri toplayabilir.
Veritabanı saat dilimiVeritabanınızdaki zaman damgalarına eklenen saat dilimi meta verileri.Tüm zaman damgalarını UTC olarak saklamak yaygın bir veritabanı uygulamasıdır.
Saat dilimi yokEksik saat dilimi meta verileriVeritabanları, zaman damgalarını saat dilimi meta verileriyle saklamanızı gerektirmez.
Patrona rapor saat dilimiPatrona'nın zaman damgalarını görüntülemek için kullandığı saat dilimi.Patrona, tarihleri ve saatleri veritabanınızda UTC olarak saklansa bile PST olarak görüntüleyebilir.

Örneğin, web sitenizi ziyaret eden her kişi için bir satır içeren bir tablonuz olduğunu varsayalım. 28 Aralık 2022, 12:00 PM "ham" zaman damgasının:

  • veritabanınızın saat dilimi kullanılarak saklanıp saklanmadığını (genellikle UTC),
  • saat dilimi meta verileri olmadan saklanıp saklanmadığını (örneğin, web sitesi ziyaretçisi HKT'deyse, 28 Aralık 2022, 12:00 PM zaman damgası "zımnen" Hong Kong saatini kullanabilir),
  • Patrona rapor saat diliminizde görüntülenip görüntülenmediğini anlamak zordur.

Daha fazla ayrıntı için Sınırlamalar bölümüne bakın.

Kabul edilen veri türleri

Veri türüconvertTimezone ile çalışır
Dize
Sayı
Zaman damgası
Boolean
JSON

"timestamp" ve "datetime" terimlerini, Patrona tarafından desteklenen herhangi bir geçici veri türünü ifade etmek için kullanıyoruz.

Zaman damgalarınız veritabanınızda dize veya sayı olarak saklanıyorsa, bir yönetici bunları Tablo Meta Verileri sayfasından zaman damgalarına dönüştürebilir.

convertTimezone kullanırken hatalar veya can sıkıcı tespit edilemeyen hatalarla karşılaşmamak için, timestamp veri türlerinin birkaç çeşidi olduğunu bilmelisiniz:

Veri türüAçıklamaÖrnek
timestamp with time zoneKonum hakkında bilgi sahibi.2022-12-28T12:00:00 AT TIME ZONE 'America/Toronto'
timestamp with offsetUTC'den zaman farkını bilir.2022-12-28T12:00:00-04:00
timestamp without time zoneSaat dilimi bilgisi yok.2022-12-28T12:00:00

Zaman damgasının ilk kısmının UTC'de olduğunu unutmayın (GMT ile aynı şey). Saat dilimi veya ofset, belirli bir saat dilimi için ne kadar zaman ekleyeceğinizi veya çıkaracağınızı size söyler.

convertTimezone tüm zaman damgası türleriyle çalışacaktır, ancak convertTimezone çıktısı her zaman timestamp without time zone olacaktır.

Sınırlamalar

convertTimezone şu anda aşağıdaki veritabanları için kullanılamamaktadır:

  • Amazon Athena
  • Databricks
  • Druid
  • MongoDB
  • Presto
  • SparkSQL
  • SQLite
  • Patrona Örnek Veritabanı

Kaynak saat dilimleri hakkında notlar

Patrona, saat dilimi veya ofset bilgisi olmadan zaman damgalarını görüntüler, bu nedenle convertTimezone kullanırken kaynak saat dilimi konusunda çok dikkatli olmanız gerekir.

Patrona rapor saat dilimi yalnızca timestamp with time zone veya timestamp with offset veri türleri için geçerlidir. Örneğin:

Veritabanınızdaki ham zaman damgasıVeri türüRapor saat dilimiŞu şekilde görüntülenir
2022-12-28T12:00:00 AT TIME ZONE 'CST'timestamp with time zone'Canada/Eastern'28 Aralık 2022, 7:00 AM
2022-12-28T12:00:00-06:00timestamp with offset'Canada/Eastern'28 Aralık 2022, 7:00 AM
2022-12-28T12:00:00timestamp without time zone'Canada/Eastern'28 Aralık 2022, 12:00 AM

Patrona rapor saat dilimi, bir convertTimezone ifadesinin çıktısına uygulanmaz. Örneğin:

convertTimezone("2022-12-28T12:00:00 AT TIME ZONE 'Canada/Central'", "Canada/Pacific", "Canada/Central")

ham timestamp without time zone üretir

2022-12-28T04:00:00

ve Patrona'da şu şekilde görüntülenir

28 Aralık 2022, 4:00 AM

Bir timestamp without time zone üzerinde convertTimezone kullanıyorsanız, kaynak saat dilimi olarak 'UTC' kullanmayı unutmayın, aksi takdirde ifade zaman damganızı yanlış miktarda kaydırır. Örneğin, timestamp without time zone yalnızca CST'de "örtük" olarak bulunuyorsa, yukarıdakiyle aynı sonucu almak için 'UTC'yi kaynak parametresi olarak kullanmalıyız.

Örneğin, timestamp without time zone için kaynak saat dilimi olarak 'CST'yi seçersek:

convertTimezone("2022-12-28T12:00:00", "Canada/Pacific", "Canada/Central")

ham timestamp without time zone alırız

2022-12-28T10:00:00

Patrona'da şu şekilde görüntülenir

28 Aralık 2022, 10:00 AM

İlgili işlevler

Bu bölüm, Patrona convertTimezone ifadesiyle aynı şekilde çalışan işlevleri ve formülleri kapsar ve kullanım durumunuza en uygun seçeneği nasıl seçeceğinize dair notlar içerir.

SQL

Bir soruyu sorgu oluşturucu kullanarak çalıştırdığınızda, Patrona grafik sorgu ayarlarınızı (filtreler, özetler vb.) bir sorguya dönüştürür ve sonuçlarınızı almak için bu sorguyu veritabanınıza karşı çalıştırır.

Tarih damgası örnek verilerimiz bir PostgreSQL veritabanında saklanan timestamp without time zone ise:

SELECT source_time::TIMESTAMP AT TIME ZONE 'UTC' AT TIME ZONE 'EST' AS team_report_time_est

'UTC' olarak ayarlanmış bir kaynak parametresi ile convertTimezone ifadesi ile aynıdır:

convertTimezone([Source Time], "Canada/Eastern", "UTC")

source_time bir timestamp with time zone veya timestamp with offset ise (örneğin, bir Snowflake veritabanında), SQL veya Patrona'da bir kaynak saat dilimi belirtmemize gerek yoktur.

SELECT convert_timezone('America/Toronto', source_time) AS team_report_time_est

aynıdır

convertTimezone([Source Time], "Canada/Eastern")

Saat dilimi adlarının veritabanınıza bağlı olduğunu unutmayın. Örneğin, Snowflake çoğu saat dilimi kısaltmasını (EST gibi) kabul etmez.

Elektronik Tablolar

Tarih damgası örnek verilerimiz "Kaynak Zaman"ın A sütununda olduğu bir elektronik tabloda ise, saat dilimini açıkça çıkararak EST'ye değiştirebiliriz:

A1 - TIME(5, 0, 0)

aynı sonucu almak için

convertTimezone([Client Time], "Canada/Eastern")

Python

Tarih damgası örnek verilerinin bir pandas veri çerçevesinde saklandığını varsayarsak, Kaynak Zaman sütununu önce bir saat dilimi olan bir timestamp nesnesine dönüştürebiliriz (temelde bir timestamp without time zone'u timestamp with time zone'a dönüştürmek), ardından saat dilimini EST'ye değiştirmek için tz_convert kullanabiliriz:

df['Source Time (UTC)'] = pd.to_timestamp(df['Source Time'], utc=True)
df['Team Report Time (EST)'] = df['Source Time (UTC)'].dt.tz_convert(tz='Canada/Eastern')

iç içe geçmiş bir convertTimezone ifadesiyle aynı şeyi yapmak için

convertTimezone(convertTimezone([Source Time], "UTC"), "Canada/Eastern", "UTC")

Daha fazla okuma