Ketika memikirkan tanggal dan waktu - apakah tengah malam hari ini di masa lalu atau masa depan?

9

Ini selalu merupakan teka-teki bagi saya dan saya menyadari bahwa ini bukan masalah yang serius dalam pemrograman atau pengembangan perangkat lunak, tetapi tampaknya ini merupakan masalah umum yang wajar di bidang kami.

Misalnya, jika saya menetapkan tanggal kedaluwarsa sebagai 2011-04-08 00:00:00 - dan mengingat waktu setempat saya saat ini adalah 10:45 pada tanggal 8 - apakah saya sudah kedaluwarsa? Atau apakah saya masih punya setengah hari lagi?

Apakah ada standar universal yang pada akhirnya berakhir pada tengah malam 'milik'?

Atau haruskah saya mengambil lembaran dari militer Inggris, dan mengatakan bahwa hari itu berakhir pada 23:59:59 dan dimulai pada 00:00:01 dan bahwa tidak ada tengah malam?

HorusKol
sumber
tunggu tunggu, dimana lokasinya? tanggal berapa sekarang? 08 atau 07?
Sufendy
sry - membuatnya lebih jelas bahwa saya sudah pada tanggal 8 (Saya di Adelaide, SA)
HorusKol
1
Jadi pada dasarnya Anda bertanya apakah 00:00:00 lebih kecil atau lebih besar dari 10:45:00?
Martin York
Saya akan mengambil daunnya. Banyak organisasi yang berurusan dengan jadwal menghindari 00:00:00 (dan 12:00:00). Ada juga beberapa kebingungan tentang perancang AM / PM untuk negara-negara yang tidak menggunakan jam 24 jam.
dbasnett
Dalam beberapa konteks 24:00:00digunakan untuk menggambarkan tengah malam pada akhir hari.
CodesInChaos

Jawaban:

17

Saya pikir dalam pemrograman (oracle dan php, tidak yakin tentang bahasa lain), tengah malam adalah awal hari. Misalnya jika Anda memotong (sysdate) Anda akan mendapatkan 2011-04-08 00:00:00 yang merupakan masa lalu kami.

jadi, ketika jam berubah dari 23:59:59 hingga 00:00:00, tanggal sebenarnya berubah dari 2011-04-08 menjadi 2011-04-09

Sufendy
sumber
2
Ya, hari bergulir di tengah malam, yaitu pukul 00:00:00.
cepat
Ini benar AFAIK. Salah satu kebingungan mungkin adalah bahwa dalam percakapan sehari-hari, "tengah malam hari ini" mungkin berarti tengah malam pada akhir hari ini, karena itu lebih mungkin terjadi sebelum orang pergi tidur, daripada setelah mereka bangun.
Jack V.
3

Tambahan untuk jawaban @Phelios, jika Anda memiliki waktu seperti 00:00:00, ini belum tentu tepat tengah malam. Alih-alih, ini adalah kumpulan besar titik waktu yang tak terhingga, yang semuanya memiliki jarak maksimum <1 detik satu sama lain. Misalnya, semua jam 00: 00: 00.345, 00: 00: 00.567 dan 00: 00: 00.842 jelas terletak pada sisi-tengah-tengah-hari yang baru, tetapi akan disingkat menjadi "00:00:00" untuk tujuan tampilan. Demikian juga, 23: 59: 59: 899 terletak di sisi lama tengah malam. Jadi, tengah malam itu sendiri adalah rentang waktu yang sangat singkat antara hari-hari yang tidak akan pernah Anda lalui dalam praktik.

T-Bull
sumber
Ini adalah satu kali penting untuk menyebut perbedaan antara teori dan praktik 'dugaan' : Dalam praktiknya pengguna mengetik tanggal / waktu hampir tidak bisa repot mengetik detik; apalagi milidetik. Dalam praktiknya, perangkat penghitung waktu yang menentukan waktu acara mungkin tidak mendukung milidetik. Dalam praktiknya bahkan jika alat penghitung waktu mendukung milidetik, tidak ada jaminan format penyimpanan tidak membulatkan sebagian waktu karena suatu alasan.
Disillusioned
1

Ini adalah masalah yang mirip dengan menghitung perbedaan antara sudut menggunakan geometri lingkaran, di mana misalnya, 0 derajat dan 360 derajat (dan 720 derajat, dll) semuanya sama. Jadi apa perbedaan antara 350 derajat dan 10 derajat?

Jawaban: itu tergantung pada arah mana Anda ingin mengukurnya - mungkin 20 derajat atau 340 derajat. Tetapi melakukan perhitungan untuk perbedaan sudut sebenarnya cukup berantakan. Perbedaan waktu calcs juga berantakan kecuali Anda mengkonversi ke bentuk internal yang membuat penambahan dan pengurangan sederhana beroperasi secara konvensional. Atau Anda menggunakan perpustakaan kelas modern yang secara ajaib menyembunyikan semua itu dari Anda (dan dengan demikian tidak pernah mengajarkan siapa pun tentang detail aktual).

dengan cepat_now
sumber
dalam kedua kasus, Anda hanya menentukan satu arah sepanjang waktu (atau lingkaran) sebagai 'positif'
HorusKol
Benar. Namun, menulis kode untuk melakukan perhitungan dan memperbaikinya setiap waktu memang membutuhkan sedikit pemikiran.
cepat