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 Zaman | Ekip Rapor Zamanı (EST) |
---|---|
28 Aralık 2022, 10:00:00 | 28 Aralık 2022, 07:00:00 |
28 Aralık 2022, 21:00:00 | 28 Aralık 2022, 19:00:00 |
27 Aralık 2022, 08:00:00 | 27 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
vetimestamp 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 dilimi | Açıklama | Örnek |
---|---|---|
İstemci saat dilimi | Bir 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 dilimi | Veritabanı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 yok | Eksik saat dilimi meta verileri | Veritabanları, zaman damgalarını saat dilimi meta verileriyle saklamanızı gerektirmez. |
Patrona rapor saat dilimi | Patrona'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 zone | Konum hakkında bilgi sahibi. | 2022-12-28T12:00:00 AT TIME ZONE 'America/Toronto' |
timestamp with offset | UTC'den zaman farkını bilir. | 2022-12-28T12:00:00-04:00 |
timestamp without time zone | Saat 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:00 | timestamp with offset | 'Canada/Eastern' | 28 Aralık 2022, 7:00 AM |
2022-12-28T12:00:00 | timestamp 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")