Anda dapat mengonversi waktu dan tanggal untuk meningkatkan efisiensi kueri log dan analisis. Topik ini menjelaskan cara mengonversi serta mengimbangi datetime menggunakan fungsi.
Istilah
Bahasa spesifik domain (DSL) mendukung tiga tipe data: string datetime, objek datetime, dan timestamp UNIX.
String datetime
String datetime digunakan untuk mengonversi data waktu dan tanggal menjadi format yang dapat dibaca. String datetime terbagi dalam dua jenis dalam sintaks DSL:
String datetime dengan zona waktu, contohnya,
2019-06-02 18:41:26+08:00.String datetime tanpa zona waktu, contohnya,
2019-06-02 10:41:26.
Pada string datetime dengan zona waktu, selisih waktu ditambahkan ke datetime untuk menunjukkan zona waktu. Contoh:
2019-06-02 18:41:26+08:00menunjukkan bahwa datetime2019-06-02 18:41:26berada di zona waktuUTC+8.2019-06-02 18:41:26-07:00menunjukkan bahwa datetime2019-06-02 18:41:26berada di zona waktuUTC-7.
Objek datetime
Objek datetime diinstansiasi untuk menampilkan data dan waktu. Objek ini digunakan untuk mengonversi data waktu dan tanggal menjadi string yang dapat dibaca.
Timestamp UNIX
Timestamp UNIX menunjukkan jumlah detik yang telah berlalu sejak pukul 00:00:00 Kamis, 1 Januari 1970. Timestamp UNIX dapat digunakan dalam skenario berikut:
Menampilkan waktu sistem.
Dalam log peristiwa, bidang metadata
__time__menunjukkan waktu ketika log dihasilkan, dan bidang__receive_time__menunjukkan waktu ketika Simple Log Service menerima log. Nilai dari bidang-bidang ini menggunakan timestamp UNIX untuk menunjukkan waktu sistem.__source__: 192.0.2.1 __tag__:__receive_time__: 1562741899 __topic__: __time__: 1562731122Melakukan perhitungan terkait waktu.
Timestamp UNIX menunjukkan jumlah detik yang telah berlalu sejak pukul 00:00:00 Kamis, 1 Januari 1970. Anda dapat menggunakan timestamp UNIX untuk melakukan perhitungan terkait waktu dalam beberapa skenario. Contohnya:
Entri log mentah
time1: 1562741899 time2: 1562731122Pengaturan DSL
e_set("time_diff", op_sub(v("time1"), v("time2")))Hasil
time1: 1562741899 time2: 1562731122 time_diff: 10777
Gunakan fungsi untuk mengonversi tipe data
Gambar berikut menunjukkan cara menggunakan fungsi untuk mengonversi tiga tipe data: string datetime, objek datetime, dan timestamp UNIX.
Tabel berikut menjelaskan skenario konversi dan fungsi konversi.
Skenario konversi | Fungsi konversi | |
Lakukan konversi antara objek datetime dan timestamp UNIX. | Konversikan objek datetime menjadi timestamp UNIX. |
|
Konversikan timestamp UNIX menjadi objek datetime. |
| |
Lakukan konversi antara objek datetime dan string datetime. | Konversikan objek datetime menjadi string datetime. |
|
Konversikan string datetime menjadi objek datetime. |
| |
Lakukan konversi antara string datetime dan timestamp UNIX. | Konversikan string datetime menjadi timestamp UNIX. |
|
Konversikan timestamp UNIX menjadi string datetime. |
| |
Tiga skenario konversi dan enam fungsi konversi dijelaskan dalam tabel sebelumnya. Fungsi konversi ini dibagi menjadi dua jenis berikut:
Fungsi konversi otomatis
Fungsi konversi otomatis seperti
dt_parsesecara otomatis mengonversi tipe data yang berbeda, seperti timestamp UNIX, objek datetime, dan string datetime.Fungsi khusus
Fungsi konversi otomatis tidak dapat memenuhi kebutuhan Anda dalam beberapa skenario. Misalnya, fungsi konversi otomatis seperti
dt_parsetidak dapat mem-parsing tipe tanggal dalam beberapa format kustom. Dalam hal ini, Anda harus menggunakan fungsidt_strptime.
Untuk informasi lebih lanjut, lihat Fungsi tanggal dan waktu dan Fungsi konversi.
Lakukan konversi antara objek datetime dan timestamp UNIX
Fungsi konversi
dt_parsetimestamp: Direkomendasikan. Fungsi konversi otomatis ini mengonversi objek datetime atau string datetime menjadi timestamp UNIX.e_set: Anda dapat mengatur parameter tz dalam fungsi ini untuk menambahkan zona waktu ke objek datetime. Anda juga dapat mengatur parameter tz untuk mengonversi zona waktu sumber ke zona waktu tujuan.
Konversikan timestamp UNIX menjadi string datetime dengan zona waktu.
Entri log mentah
time: 1562741899Pengaturan DSL
e_set("new_time", dt_parse(v("time"), tz="Asia/Shanghai"))Hasil
time: 1562741899 new_time: 2019-07-10 06:58:19+08:00
Lakukan konversi antara string datetime dan timestamp UNIX
Fungsi konversi
dt_str: mengonversi timestamp UNIX, objek datetime, atau string datetime menjadi string datetime dalam format tertentu.dt_strftimestamp: mengonversi timestamp UNIX menjadi string datetime.dt_parsetimestamp: mengonversi string datetime atau objek datetime menjadi timestamp UNIX.
Skenario 1: Konversikan string datetime tanpa zona waktu menjadi timestamp UNIX.
Misalnya, untuk mengonversi
2019-06-02 18:41:26menjadi timestamp UNIX, Anda harus menentukan zona waktu untuk string datetime. Timestamp UNIX yang dikonversi bervariasi sesuai dengan zona waktu.Entri log mentah
time: 2019-06-02 18:41:26Pengaturan DSL
e_set("Shanghai_timestamp", dt_parsetimestamp(v("time"), tz="Asia/Shanghai")) e_set("Los_Angeles_timestamp", dt_parsetimestamp(v("time"), tz="America/Los_Angeles")) e_set("UTC_timestamp", dt_parsetimestamp(v("time")))Hasil
Shanghai_timestamp: 1559472086 Los_Angeles_timestamp: 1559526086 UTC_timestamp: 1559500886
Catatantz="Asia/Shanghai"menunjukkan bahwa waktu yang ditunjukkan oleh bidangtimeberada di zona waktu Shanghai.Jika tidak ada zona waktu yang ditentukan, zona waktu UTC+0 digunakan sebagai zona waktu default.
Untuk informasi lebih lanjut tentang nilai parameter
tz=time zone string, lihat Zona waktu.
Skenario 2: Konversikan string datetime dengan zona waktu menjadi timestamp UNIX.
Anda tidak perlu menentukan parameter zona waktu jika string datetime berisi zona waktu, misalnya
2019-06-02 18:41:26+08:00.Entri log mentah
China_time : 2019-06-02 18:41:26+08:00 America_time: 2019-06-02 3:41:26-07:00 UTC_time : 2019-06-02 10:41:26+00:00Pengaturan DSL
e_set("timestamp1", dt_parsetimestamp(v("China_time"))) e_set("timestamp2", dt_parsetimestamp(v("America_time"))) e_set("timestamp3", dt_parsetimestamp(v("UTC_time")))Hasil
America_time:2019-06-02 3:41:26-07:00 China_time:2019-06-02 18:41:26+08:00 UTC_time:2019-06-02 10:41:26+00:00 timestamp1: 1559472086 timestamp2: 1559472086 timestamp3: 1559472086
Skenario 3: Konversikan datetime kustom tanpa zona waktu menjadi timestamp UNIX.
Entri log mentah
time1: 2019-07-10 06:58:19 time2: 2019/07/10 06-58-19Pengaturan DSL
e_set("time3", dt_parsetimestamp(v("time1"))) e_set("time4", dt_parsetimestamp(dt_strptime(v("time2"), "%Y/%m/%d %H-%M-%S")))Hasil
time1: 2019-07-10 06:58:19 time2: 2019/07/10 06-58-19 time3: 1562741899 time4: 1562741899
Lakukan konversi antara objek datetime dan string datetime.
Fungsi konversi
dt_parse: mengonversi string datetime atau timestamp UNIX menjadi objek datetime.dt_astimezone: mengembalikan objek datetime yang berisi zona waktu.
Skenario 1: Konversikan string datetime tanpa zona waktu menjadi objek datetime dalam zona waktu tertentu.
Misalnya, Anda dapat mengonversi string datetime
2019-06-02 18:41:26menjadi timestamp UNIX dan kemudian mengonversi timestamp UNIX menjadi string datetime di zona waktu lain. Contoh berikut menunjukkan cara mengonversi datetime di zona waktu Los Angeles menjadi datetime di zona waktu Shanghai.Entri log mentah
# Asumsikan bahwa datetime di bidang time adalah zona waktu Los Angeles. time : 2019-06-04 2:41:26Pengaturan DSL
e_set("timestamp", dt_parsetimestamp(v("time"), tz="America/Los_Angeles")) e_set("Shanghai_time", dt_parse(v("timestamp"), tz="Asia/Shanghai"))Hasil
Shanghai_time : 2019-06-04 17:41:26+08:00 time : 2019-06-04 2:41:26 timestamp:1559641286
Skenario 2: Konversikan string datetime tanpa zona waktu menjadi objek datetime dengan zona waktu.
Entri log mentah
time : 2019-07-10 06:58:19Pengaturan DSL
e_set("new_time", dt_parse(v("time"), tz="Asia/Shanghai"))Hasil
time: 2019-07-10 06:58:19 new_time: 2019-07-10 06:58:19+08:00
Skenario 3: Konversikan string datetime dengan zona waktu menjadi objek datetime di zona waktu tujuan.
Entri log mentah
time : 2019-06-04 2:41:26+08:00Pengaturan DSL
e_set("new_time", dt_astimezone(v("time"), tz="America/Los_Angeles"))Hasil
new_time : 2019-06-03 11:41:26-07:00 time : 2019-06-04 2:41:26+08:00
Offset datetime
Fungsi konversi
Fungsi
dt_add: Sintaks berikut menunjukkan parameter dari fungsi ini.dt_add (nama bidang, dt1 = None, dt2 = None, year (s) = None, month (s) = None, day (s) = None, hour (s) = None, minute (s) = None, second (s) = None, microsecond (s) = None, weeks (s) = None, weekday = None)Parameter yang diakhiri dengan (s), seperti
year (s),month (s), danday (s), memiliki dua pola. Misalnya, year (s) bisa menjadiyeardanyears, dan month (s) bisa menjadimonthdanmonths. Ambilyeardanyearssebagai contoh. Jikayeardigunakan dalam sintaks, nilaiyearmenggantikan nilai tahun dalam entri log mentah. Jikayearsdigunakan dalam sintaks, nilaiyearsditambahkan ke nilai tahun dalam entri log mentah. Anda harus menggunakan fungsidt_addpada saat yang sama. Fungsi ini memungkinkan Anda menambahkan nilai, mengurangi nilai, atau menimpa nilai datetime.Parameter
weekdaydalam fungsidt_adddigunakan bersama dengan parameterdt_MOdandt_TUuntuk mengimbangi hari kerja tertentu. Untuk informasi lebih lanjut, lihat dt_MO.
Skenario 1: Offset datetime berdasarkan tahun dan bulan.
Contoh berikut menunjukkan cara mengimbangi datetime berdasarkan tahun dan bulan.
Entri log mentah
time1 : 2019-06-04 2:41:26Pengaturan DSL 1
e_set("time2", dt_add(v("time1"), year=2018))Hasil 1
time1 : 2019-06-04 2:41:26 time2 : 2018-06-04 02:41:26Pengaturan DSL 2
e_set("time2", dt_add(v("time1"), years=2018))Hasil 2
time1 : 2019-06-04 2:41:26 time2 : 4037-06-04 02:41:26
Skenario 2: Offset datetime berdasarkan minggu
Contoh berikut menunjukkan cara mengimbangi datetime berdasarkan minggu.
Entri log mentah
# 4 Juni 2019 adalah hari Selasa. time1 : 2019-06-04 2:41:26Pengaturan DSL
# Kembalikan datetime hari Senin setelah time1. e_set("nex_Monday", dt_add(v("time1"), weekday=dt_MO(1))) # Kembalikan datetime hari Selasa sebelum time1. e_set("previous_Tuesday", dt_add(v("time1"), weekday=dt_TU(op_neg(1)))) # Kembalikan datetime hari Sabtu kedua setelah time1. e_set("nex_next_Saturday", dt_add(v("time1"), weekday=dt_SA(2))) # Kembalikan datetime hari Minggu kedua terakhir sebelum time1. e_set("previous_previous_Sunday", dt_add(v("time1"), weekday=dt_SU(op_neg(2))))Hasil
next_Monday : 2019-06-10 02:41:26 next_next_Saturday : 2019-06-15 02:41:26 previous_Tuesday : 2019-06-04 2:41:26 previous_previous_Sunday : 2019-05-26 02:41:26 time1 : 2019-06-04 2:41:26
CatatanJika
time 1adalah hari Selasa, hari Selasa terakhir dan hari Selasa berikutnya adalah hari-hari yang satu minggu sebelum atau sesudahtime 1.