Heidisql: Tampilan stempel waktu salah sebagai nilai tanggal di kisi

Dibuat pada 31 Jan 2018  ·  5Komentar  ·  Sumber: HeidiSQL/HeidiSQL

Mengatur "Ini adalah kolom stempel waktu UNIX" aktif dalam opsi tampilan Grid untuk melihat stempel waktu UNIX sebagai representasi tanggal.

Perilaku yang diharapkan

Nilai (stempel waktu unix) berikut disimpan sebagai BIGINT di basis data:
1098655200
GMT: Minggu, 24 Oktober 2004 10:00:00 PM
Berlin: Senin, 25 Oktober 2004 12:00:00 GMT+02:00 DST

Grid harus ditampilkan di sini:
2004-10-24 22:00:00 (GMT) atau
2004-11-25 00:00:00 (Lokal)

Perilaku saat ini

Kotak menunjukkan:
2004-10-24 23:00:00

Tampaknya zona waktu sesaat digunakan untuk menampilkan nilai, dan ini adalah GMT+1 mulai hari ini (31-01-2018) di Jerman, tidak ada waktu musim panas.
Nilai harus ditampilkan sesuai dengan zona waktu pada tanggal yang ditentukan, yaitu GMT+2, waktu musim panas aktif.

Langkah-langkah untuk mereproduksi

  1. Buat kolom BIGINT dan masukkan nilai 1098655200
  2. Setel "Opsi tampilan kisi" ke "Ini adalah kolom stempel waktu UNIX"
  3. Anda akan mendapatkan: 2004-10-24 23:00:00
  4. Diharapkan: 2004-11-25 00:00:00

Konteks

  • Versi HeidiSQL: 9.5.0.5196
  • Sistem basis data + versi: MariaDB 10.2.12
  • Sistem operasi: Windows 10, Zona Waktu Eropa/Berlin
bug

Semua 5 komentar

hey @mpaland , MariaDB Anda berjalan dengan zona waktu yang benar Eropa/Berlin?
Saya tidak menangani banyak konversi, stempel waktu menulis ke UTC, bukan? dan MySQL mengonversi ke zona waktu Anda?

Saya mencoba mereproduksi tetapi di server yang saya miliki tanpa zona waktu yang diinstal :(

@lukinhaspm ini bukan masalah server, ini hanya pertanyaan tentang representasi cap waktu yang benar di HeidiSQL. UNIX TIMESTAMP selalu dimaksudkan dalam hitungan detik setelah 1970-01-01 00:00:00 UTC.

Anda dapat menyajikan stempel waktu seperti itu secara ketat di UTC, yang baik-baik saja, atau dalam zona waktu tertentu (kebanyakan milik sendiri). Melakukan itu, memerlukan zona waktu yang valid pada tanggal stempel waktu, bukan pada tanggal sebenarnya.
Tampaknya HeidiSQL mengambil tanggal sebenarnya. Saya belum melihat kodenya, jadi itu hanya spekulasi.

@mpaland Saya mengerti dan setuju!

Saya menyelidiki ini sedikit lebih jauh. Sayangnya solusinya sepertinya tidak mudah.
Masalahnya adalah aturan DST (waktu musim panas) yang rumit di seluruh dunia dan bahkan lebih buruk lagi, bentuknya yang terus berubah dan tidak konstan.
Untuk mendapatkan koreksi DST waktu lokal untuk stempel waktu epoch tertentu, perlu diketahui aturan DST yang tepat yang diterapkan secara lokal pada waktu stempel waktu.
Pustaka konversi perlu melacak semua perubahan aturan DST di setiap negara selama bertahun-tahun untuk menghitung offset untuk titik mana pun di masa lalu.
Windows sepenuhnya mengabaikan masalah ini dan selalu mengonversi sesuai dengan aturan _actual_ DST pada saat konversi.
Untuk melakukannya dengan benar, perlu menggunakan salah satu perpustakaan zona waktu/DST yang sangat canggih di internet.

Meskipun sebagian besar dari apa yang @mpaland telah nyatakan tentang

1584975600 dan 1585576800 keduanya 16:00 di Eropa/Madrid, tetapi heidisql salah mewakili salah satunya (tergantung apakah kita menggunakan waktu musim panas atau tidak)

Dimungkinkan untuk menampilkan kasing ini dengan benar tanpa menjadi masalah besar dengan hanya memeriksa apakah waktu yang dihasilkan harus pada waktu musim panas atau tidak dan menerapkan offset yang benar.

Meskipun ini bukan solusi yang sempurna, saya akan mengatakan itu mungkin mencakup sebagian besar kasus penggunaan, dan kasus tepi mungkin akan mudah terlihat, ini lebih merupakan bantuan kecil bagi para pengembang untuk memverifikasi sesuatu yang baik daripada tampilan yang dapat diandalkan pengguna akhir.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

rentalhost picture rentalhost  ·  5Komentar

dzintb picture dzintb  ·  3Komentar

catamphetamine picture catamphetamine  ·  3Komentar

hrvoj3e picture hrvoj3e  ·  4Komentar

chrysler5798 picture chrysler5798  ·  5Komentar