Kiedy myślimy o datach i godzinach - czy północ jest dziś w przeszłości czy w przyszłości?

9

To zawsze jest dla mnie zagadka - i zdaję sobie sprawę, że nie jest to problem ściśle związany z programowaniem lub tworzeniem oprogramowania, ale wydaje się, że jest dość powszechny w naszej dziedzinie.

Na przykład, jeśli ustawiłbym datę wygaśnięcia jako 2011-04-08 00:00:00 - i biorąc pod uwagę mój aktualny czas lokalny, to już 8:45 już 8-ty - czy już wygasłem? A może mam jeszcze jakieś pół dnia?

Czy istnieje uniwersalny standard, do którego końca dnia „należy”?

A może powinienem wziąć list od brytyjskiego wojska i powiedzieć, że dzień kończy się o 23:59:59 i zaczyna o 00:00:01 i że nie ma północy?

HorusKol
źródło
czekaj czekaj, gdzie jest twoja lokalizacja? jaka jest teraz data? 08 czy 07?
Sufendy,
sry - wyjaśniłem, że jestem już na 8 miejscu (jestem w Adelaide, SA)
HorusKol
1
Więc w zasadzie pytasz, czy 00:00:00 jest mniejszy czy większy niż 10:45:00?
Martin York
Wziąłbym liść. Wiele organizacji zajmujących się harmonogramami unika 00:00:00 (i 12:00:00). Istnieje również pewne zamieszanie dotyczące oznaczników AM / PM dla krajów, które nie używają zegarów 24-godzinnych.
dbasnett
W niektórych kontekstach 24:00:00jest używany do opisywania północy pod koniec dnia.
CodesInChaos

Odpowiedzi:

17

Myślę, że w programowaniu (Oracle i php, nie jestem pewien co do innych języków), północ to początek dnia. Na przykład, jeśli skrócisz (sysdate), dostaniesz 2011-04-08 00:00:00, co jest naszą przeszłością.

więc kiedy zegar zmienił się z 23:59:59 na 00:00:00, data faktycznie zmieniła się z 2011-04-08 na 2011-04-09

Sufendy
źródło
2
Tak, dzień mija o północy, czyli 00:00:00.
szybko_niedz.
To jest poprawne AFAIK. Jednym z nieporozumień może być to, że w swobodnej mowie „północ dziś” prawdopodobnie oznacza północ pod koniec dnia, ponieważ jest to bardziej prawdopodobne, zanim ludzie pójdą spać, niż po przebudzeniu.
Jack V.
3

Dodatek do odpowiedzi @Phelios, jeśli masz czas taki jak 00:00:00, niekoniecznie jest to dokładnie północ. Jest to raczej nieskończenie duży zestaw punktów w czasie, z których wszystkie mają maksymalną odległość <1 sekundy względem siebie. Na przykład wszystkie 00: 00: 00.345, 00: 00: 00.567 i 00: 00: 00.842 wyraźnie leżą po stronie dnia północy, ale dla celów wyświetlania zostaną skrócone do „00:00:00”. Podobnie, 23: 59: 59: 899 leży po północy w dawnych czasach. Zatem sama północ jest nieskończenie krótkim czasem między dniami, w których nigdy nie uderzysz w praktyce.

T-Bull
źródło
Jest to jeden raz, kiedy ważne jest, aby wskazać różnicę między teorią a „domniemaną” praktyką : w praktyce użytkownik wpisujący datę / czas może mieć trudności z wpisaniem sekund; nie mówiąc już o milisekundach. W praktyce urządzenie określające czas zdarzenia może nie obsługiwać milisekund. W praktyce, nawet jeśli urządzenie mierzące czas obsługuje milisekundy, nie ma gwarancji, że format pamięci z jakiegoś powodu nie zaokrągla / nie skraca czasu.
Rozczarowany
1

Jest to podobny problem do obliczania różnic między kątami przy użyciu geometrii kołowej, gdzie na przykład 0 stopni i 360 stopni (i 720 stopni itp.) Są takie same. Jaka jest różnica między 350 stopni a 10 stopni?

Odpowiedź: zależy od tego, w jaki sposób chcesz go zmierzyć - może to być 20 stopni lub 340 stopni. Ale obliczanie różnic kątowych jest w rzeczywistości dość nieuporządkowane. Calcs różnicy czasu są podobnie bałaganiarskie, chyba że zostaniesz przekonwertowany na formę wewnętrzną, która umożliwia zwykłe dodawanie i odejmowanie. Lub korzystasz z nowoczesnej biblioteki klasowej, która magicznie ukrywa wszystko przed tobą (a tym samym nigdy nie uczy nikogo o faktycznych szczegółach).

szybko
źródło
w obu przypadkach podajesz tylko jedną drogę przez całą dobę (lub kółko) jako „pozytywne”
HorusKol
Prawdziwe. Jednak napisanie kodu w celu wykonania obliczeń i poprawnego za każdym razem wymaga trochę przemyślenia.
szybko_nie