DATETIME początek DATETIME koniec
Błagam, aby zamiast tego użyć dwóch wartości DATETIME , oznaczonych czymś w rodzaju event_start i event_end .
Czas to skomplikowana sprawa
Większość świata przyjęła obecnie system metryczny oparty na denery dla większości pomiarów, słusznie lub nie. Ogólnie jest to dobre, bo przynajmniej wszyscy możemy się zgodzić, że ag, to ml, to cm sześcienny. Przynajmniej mniej więcej tak. System metryczny ma wiele wad, ale przynajmniej jest konsekwentnie błędny na całym świecie.
Z czasem jednak mamy; 1000 milisekund na sekundę, 60 sekund do minuty, 60 minut do godziny, 12 godzin na każde pół dnia, około 30 dni w miesiącu, które różnią się w zależności od miesiąca, a nawet roku, każdy kraj ma swój czas od innych , sposób formatowania czasu w każdym kraju jest różny.
To dużo do przetrawienia, ale długa i krótka to niemożliwe, aby tak złożony scenariusz miał proste rozwiązanie.
Niektóre rogi można wyciąć, ale są takie, w których rozsądniej jest tego nie robić
Chociaż górna odpowiedź sugeruje, że zapisywanie liczby całkowitej minut po północy może wydawać się całkiem rozsądne, nauczyłem się tego unikać na własnej skórze.
Powody wprowadzenia dwóch wartości DATETIME to zwiększenie dokładności, rozdzielczości i sprzężenia zwrotnego.
Są one bardzo przydatne, gdy projekt daje niepożądane rezultaty.
Czy przechowuję więcej danych niż jest to wymagane?
Początkowo może się wydawać, że przechowywanych jest więcej informacji niż potrzebuję, ale jest dobry powód, aby przyjąć to trafienie.
Przechowywanie tych dodatkowych informacji prawie zawsze oszczędza mi czas i wysiłek na dłuższą metę, ponieważ nieuchronnie stwierdzam, że gdy ktoś mówi, ile czasu zajęło, będzie chciał wiedzieć, kiedy i gdzie miało miejsce wydarzenie.
To ogromna planeta
W przeszłości byłem winny ignorowania faktu, że oprócz mojego własnego są inne kraje na tej planecie. Wtedy wydawało się to dobrym pomysłem, ale to ZAWSZE powodowało problemy, bóle głowy i późniejszą stratę czasu. ZAWSZE bierz pod uwagę wszystkie strefy czasowe.
DO#
DateTime ładnie renderuje się do ciągu w C #. Metoda ToString (format ciągu znaków) jest kompaktowa i łatwa do odczytania.
Na przykład
new TimeSpan(EventStart.Ticks - EventEnd.Ticks).ToString("h'h 'm'm 's's'")
Serwer SQL
Ponadto, jeśli czytasz bazę danych oddzielnie dla interfejsu aplikacji, dateTimes jest przyjemny do odczytania na pierwszy rzut oka, a wykonywanie na nich obliczeń jest proste.
Na przykład
SELECT DATEDIFF(MINUTE, event_start, event_end)
Standard daty ISO8601
Jeśli używasz SQLite, nie masz tego, więc zamiast tego użyj pola tekstowego i zapisz je w formacie ISO8601, np.
„2013-01-27T12: 30: 00 + 0000”
Uwagi:
Używa 24-godzinnego zegara *
Przesunięcie czasu (lub +0000) części ISO8601 jest odwzorowywane bezpośrednio na wartość długości geograficznej współrzędnej GPS (nie biorąc pod uwagę czasu letniego lub całego kraju).
Na przykład
TimeOffset=(±Longitude.24)/360
... gdzie ± odnosi się do kierunku wschodniego lub zachodniego.
Dlatego warto zastanowić się, czy warto przechowywać razem z danymi długość i szerokość geograficzną oraz wysokość. Zależy to od zastosowania.
ISO8601 to format międzynarodowy.
Więcej szczegółów można znaleźć na wiki, pod adresem http://en.wikipedia.org/wiki/ISO_8601 .
Data i czas są przechowywane w czasie międzynarodowym, a przesunięcie jest rejestrowane w zależności od tego, gdzie na świecie czas został zapisany.
Z mojego doświadczenia wynika, że zawsze istnieje potrzeba przechowywania pełnej daty i godziny, niezależnie od tego, czy myślę, że jest to moment rozpoczęcia projektu. ISO8601 to bardzo dobry, przyszłościowy sposób na zrobienie tego.
Dodatkowe porady gratis
Warto też pogrupować wydarzenia jak łańcuch. Np. Jeśli nagrywasz wyścig, całe zdarzenie może być pogrupowane według wyścigów, wyścigów, punktów kontrolnych obwodu i okrążeń.
Z mojego doświadczenia wynika również, że mądrze jest określić, kto przechował zapis. Albo jako oddzielna tabela wypełniana przez wyzwalacz lub jako dodatkowa kolumna w oryginalnej tabeli.
Im więcej w to wkładasz, tym więcej wychodzisz
W pełni rozumiem pragnienie oszczędzania przestrzeni, jak to tylko możliwe, ale rzadko robiłbym to kosztem utraty informacji.
Praktyczna zasada dotycząca baz danych jest taka, jak mówi tytuł, baza danych może powiedzieć tylko tyle, ile zawiera dane, a cofanie się do danych historycznych i wypełnianie luk może być bardzo kosztowne.
Rozwiązaniem jest poprawienie tego za pierwszym razem. Z pewnością łatwiej to powiedzieć niż zrobić, ale teraz powinieneś mieć głębszy wgląd w efektywny projekt bazy danych, a następnie mieć znacznie większą szansę na poprawienie go za pierwszym razem.
Im lepszy projekt początkowy, tym mniej kosztowne będą późniejsze naprawy.
Mówię to wszystko tylko dlatego, że gdybym mógł cofnąć się w czasie, to właśnie to powiedziałbym sobie, kiedy tam dotarłem.