Czy jest jakiś techniczny powód, dlaczego tak jest? Zastanawiałem się w przypadku RDBMS, że ma to coś wspólnego z wydajnością, ponieważ na przykład „ROK” jest bardziej szczegółowy niż „MIESIĄC”: masz tylko rok 2000, ale każdego roku masz „Styczeń”, co ułatwiłoby / przyspieszyło filtrowanie / sortowanie czegoś według roku, i właśnie dlatego rok jest pierwszy.
Ale nie wiem, czy to naprawdę ma sens ... Czy jest jakiś powód?
sql
engineering
rdbms
date-format
lucaswxp
źródło
źródło
asctime
, są nadal szeroko stosowane w wielu miejscach. Fajnie, że RFC 3339 i ISO 8601 stopniowo wypierają starsze formaty iz pewnością powinny być używane w przyszłości. Mówiąc bardziej ogólnie, powiedziałbym, że podstawowa forma ISO 8601 (zwykły RRRRMMDD bez znaków separatora) jest w rzeczywistości mniej powszechna niż niektóre inne formy, takie jak RRRR-MM-DD.Odpowiedzi:
W ten sposób daty można łatwo sortować jako ciągi znaków przy użyciu domyślnych reguł sortowania (tj. Sortowania leksykograficznego ).
Z tego powodu zarówno miesiąc, jak i dzień są określane za pomocą dwóch cyfr (w razie potrzeby dodając początkowe zero).
W rzeczywistości jest to jeden z formatów daty określonych w ISO 8601 . Ten standard definiuje również format daty i godziny
2015-03-27T15:26:40Z
, który można również sortować jako ciągi znaków.Jednak RRRRMMDD ma tę dodatkową zaletę, że umożliwia łatwe (bez podciągów i zastępowania znaków) parsowanie łańcucha jako liczby całkowitej i nadal korzysta z domyślnego porządku na liczbach całkowitych.
źródło
Jeszcze nie wspomniano, ale szybko zamykasz zamówienie wewnątrz RRRR. To już tysiąclecia, stulecia, dekady, lata. Innymi słowy, RRRR jest już zamawiany od najdłuższego okresu do najkrótszego okresu. To samo dotyczy MM i DD, tak właśnie działa system liczbowy.
Aby więc zachować porządek między polami zgodny z porządkiem w obrębie pól, jedyną opcją jest RRRRMMDD.
Jak zauważyli Zahbaz i Arseni Mourzenko, formaty RRRRMMDD można łatwo sortować. To nie jest szczęśliwy zbieg okoliczności, to bezpośrednia konsekwencja stawiania pól na jak najdłuższy czas na pierwszym miejscu (i utrzymywania stałej długości; wprowadzamy tutaj problem Y10K).
źródło
Tak. Te programy będą korzystać z ISO 8601 .
ISO 8601 ma wiele zalet w porównaniu z innymi formatami dat:
1_file, 10_file, 2_file
.).Jeśli chodzi o to, dlaczego ISO 8601 istnieje w pierwszej kolejności, to dlatego, że ludzie wymieniali formaty dat dwuznaczne i mylące podczas wymiany danych między krajami / systemami i potrzebowali czegoś jednoznacznego.
Uzasadnienie znajduje się we wstępie specyfikacji .
Standard definiuje „podstawowe” warianty jako minimalizujące użycie ograniczników. Tak,
YYYYMMDD
jest podstawowym alternatywny do rozszerzonej formieYYYY-MM-DD
.źródło
Jest tak, ponieważ wszystkie inne sposoby na zrobienie tego są niejednoznaczne.
01/02/2003 co to znaczy? Drugi styczeń 2003? Czy w Europie: 1 lutego 2003 r.? Jeszcze gorzej jest, jeśli użyjesz dwóch cyfr dla roku, jak 01/02/03.
Dlatego używasz RRRRMMDD, jest to konwencja, która pozwala nam jasno komunikować się o datach, 20030201, ponieważ data jest zawsze jasna. (i ułatwia sortowanie)
(Teraz nie przechowuj tego jako liczby całkowitej 20 milionów 30 tysięcy dwieście i 1. proszę, dobrze? Proszę, proszę?)
źródło
Niech t1 i t2 będą odrębnymi liczbami całkowitymi, które reprezentują dwa razy zapisane w formacie RRRRMMDD. Zatem t1 <t2 oznacza, że t2 wystąpiło po t1.
Tracisz to zamówienie przy pierwszym formatowaniu DD i MM.
ISO jest, według IMO, jedynym rozsądnym formatem.
źródło
feature_test_macros(7)
, na przykład posiadających_POSIX_C_SOURCE > 200809L
środki, które obsługują funkcje z POSIX.1-2008 ...Jedną z kwestii, o których nie wspomniano, jest to, że w wejściach interaktywnych ten format pozwala kontrolować dane wejściowe.
System nie może wiedzieć, czy miesiąc ma 28, 29, 30 lub 31 dni, nie znając konkretnego roku i miesiąca. Kiedy interaktywne dane wejściowe nakazują, aby rok i miesiąc były na pierwszym miejscu, można sprawdzić, czy dzień (wstawiony jako ostatni) jest w dozwolonym zakresie.
To prawda, że pytanie dotyczyło głównie formatu daty, ale można argumentować, że format daty jest zgodny z formatowaniem przedstawionym użytkownikowi.
źródło
Zamówienia RRRRMMDD pochodzą z tego samego sposobu, w jaki składane są numery: najpierw najważniejsza część. MMDDRRRR byłoby jak napisanie „sto dwadzieścia trzy” jako „dwadzieścia sto trzy”.
W naszej kulturze naturalnie rozumiemy MMDDRRRR, ponieważ jako ludzie mamy świadomość czasu, a lata powoli postępują. Ogólnie wiemy, jaki jest rok. Widok roku rzadko ma znaczenie, więc przesuwamy go do tyłu. Miesiące zmieniają się po prostu wystarczająco szybko, aby zachować swoje znaczenie. Inne kultury radzą sobie z tym inaczej. Znaczna część świata woli DDMMRRRR.
źródło
Wspomniano o sortowaniu, ale zdecydowanie najbardziej użytecznym powodem jest porównanie ich jako „ciągów”, i tak, 26-znakowy znacznik czasu jest uporządkowany podobnie.
Wiem, że takie porównania są niezbędne do sortowania, ale generalnie są przydatne do sortowania 2-elementowego.
Pracowałem nad projektami, w których nie zostało to przyjęte, i tak, programiści próbowali (z mieszanymi wynikami) porównać daty jako ciągi znaków.
Ładne formatowanie jest po stronie klienta lub składu.
źródło
Ten format sprawia, że kolejność alfabetyczna ciągów jest identyczna z chronologiczną kolejnością dat. Jest to przydatne, ponieważ wiele narzędzi zapewnia alfabetyczne porządkowanie np. Plików według nazwy, ale nie ma możliwości analizowania dowolnie sformatowanych dat na podstawie nazw plików i sortowania według nich.
źródło
Chodzi o restrykcyjność. Wyobraź sobie ROK, MIESIĄC i DZIEŃ jako parametry, w formacie RRRRMMDD każdy parametr jest bardziej restrykcyjny niż poprzedni.
Więc jeśli chcesz wyszukać coś, co wydarzyło się w 1970 roku, możesz to zrobić, wyszukując ciąg znaków od
"1970*"
, ale jeśli pamiętasz, który miesiąc był, możesz dodać miesiąc jak"197005*"
. W ten sposób każdy „parametr” daty daje bardziej szczegółowe informacje.To jedyny sposób na przejście od mniej szczegółowych informacji (
"1970*"
) do bardziej szczegółowych informacji ("19700523"
).źródło
1970*
i197005*
reprezentują składnię symboli wieloznacznych „glob”, możesz wyszukać kilka dat MMDDYYYY, wyszukując glob*1970
lub05*1970
. Twoja odpowiedź może domyślnie zakładać dodatkowe ograniczenie, o którym wyraźnie nie wspomniałeś, i można je poprawić, wyjaśniając twoje założenie.Jest to czytelny dla człowieka format danych wejściowych i wyjściowych, niekoniecznie jest przechowywany w ten sposób.
Ponad jedna trzecia wszystkich języków programowania została opracowana w kraju, w którym angielski jest językiem podstawowym, a większość współczesnych jest zgodna z jakimś opisem standardu - międzynarodowym standardem dat jest ISO 8601 .
Więcej informacji: (TMI?)
W miarę upływu czasu, zwykle do przodu, przyrosty dni najpierw, a następnie miesiące, a potem lata - może być łatwiej zrozumieć, gdybyśmy mieli daty dziesiętne (i czas dziesiętny ) - w miarę upływu czasu liczba się powiększa. Po prostu ludziom łatwiej jest spojrzeć na liczbę i porównać ją z inną datą na pierwszy rzut oka.
Komputer nie dba o to, jakiej struktury chcesz użyć i na większości (ale nie wszystkich ) komputerach używana jest logika binarna - podstawa e faktycznie ma najniższą ekonomię podstawową, ale nie jest najbardziej wydajna ani najłatwiejsza dla pełnej sekwencji .
Rzeczywisty format danych wejściowych i wyjściowych różni się w zależności od kraju i zależy od lokalizacji , podczas gdy RRRRMMDD może wydawać się najbardziej sensowny i być przyzwyczajonym do tego, że nie jest dziś powszechny , ani nie było tak w przeszłości dla najdłużej, ale nawet dziś cyfry rzymskie są powszechnie używane do dat .
Znajomość roku z góry informuje o liczbie dni w roku, największej różnicy w czasie trwania roku. Informuje z góry o liczbie kolejnych dni w każdym miesiącu (w celu sprawdzenia błędów podczas wprowadzania), umożliwiając wprowadzenie danych z pierwszego dnia, może być konieczne utworzenie kopii zapasowej, jeśli kolejny rok nie zgadza się z danymi wejściowymi - co może utrudnić dostęp do danych wejściowych . Ma to również znaczenie w odniesieniu do formatu kalendarza . Zobacz także kalendarz maniaków z jego dziesiętnymi gwiazdkami.
Jeśli chodzi o komputer, może on używać czasu Epoki UNIX , liczby sekund, które upłynęły od 00:00:00 uniwersalnego czasu koordynowanego (UTC), czwartek, 1 stycznia 1970 r., Gdzie każdy dzień jest traktowany tak, jakby zawierał dokładnie 86400 sekund. Zobacz także dzień juliański . Format RRRRMMDD jest po prostu preferowany przez egocentrycznych ludzi, IAU uważa rok za rok julijski wynoszący 365,25 dni (31,5576 milionów sekund), chyba że podano inaczej.
źródło
Innym zastosowaniem, jakie widziałem w tej reprezentacji, jest to, że możesz przechowywać daty jako liczby całkowite (tj. W bazie danych), używając tylko 4 bajtów na datę. Użycie RRRRMMDD oznacza zatem, że porównania liczb całkowitych (często pojedyncza instrukcja maszynowa) mają taki sam wynik jak porównania w reprezentowanej dacie. I drukuje umiarkowanie czytelnie dla człowieka. I to nie wymaga żadnego kodu ani specjalnego wsparcia w żadnym głównym środowisku programistycznym.
Jeśli te rzeczy to większość tego, co musisz zrobić z datami, i musisz zrobić dużo, to ten format ma duży urok.
Dla porównania daty w popularnych formatach, takich jak DD / MM / RRRR, przyjmują 10 bajtów jako ciąg znaków ASCII. Ciągi RRRRMMDD zmniejszają to do 8 i zyskują zaletę „porównywanie reprezentacji daje taki sam wynik jak porównywanie dat”, ale nawet wtedy porównanie oparte na łańcuchach jest porównanie znak po znaku, a nie porównanie pojedynczej liczby całkowitej.
źródło
Ten sam powód, dla którego Księżyc jest zrobiony z zielonego sera: nie jest. W większości przypadków domyślnym formatem jest jakiś zlokalizowany ciąg. Czasami używany jest format ISO, ale zwykle z myślnikami dla lepszej czytelności.
YYYYMMDD
(lub%Y%m%d
wstrftime
języku potocznym) rzadko jest ustawieniem domyślnym. Szczerze mówiąc, jestem pewien, że to widziałem, ale nie mogę teraz wymyślić żadnego przykładu.Data uniksowa (podstawowe narzędzia GNU)
Wynik:
Pyton
wynik:
do
Wynik:
C ++
Wynik:
JavaScript
Wynik:
SQLite
Wynik:
LibreOffice Calc
Gnumeric
OnlyOffice
Python + numpy
Wynik:
Python + pandy
Wynik:
Inżynieria oprogramowania
apport.log
alternatives.log
puchary / access.log
syslog
źródło
Do 27. Sep 22:27:09 CEST 2018
tutaj.)Dodatkową korzyścią nie wspomnianą do tej pory jest to, że pożądana kwantyzacja (przypisanie dokładnej wartości jako należącej do tego samego ogólnego zakresu wartości) jest stosunkowo łatwą i szybką pojedynczą operacją.
Załóżmy, że piszesz raport podsumowujący dzisiejsze wydarzenia, takie jak suma i liczba sprzedaży. Data i godzina sprzedaży są przechowywane jako RRRRMMDDGGMISS, wystarczy zachować 8 znaków z lewej strony (jeśli jest to ciąg znaków) lub podzielić liczbę całkowitą (tj. Piętro) o 1 000 000, aby skrócić datę i datę do dnia sprzedaży.
Podobnie, jeśli chcesz sprzedać miesiąc, zachowujesz tylko 6 cyfr z lewej strony lub dzielisz przez 100 000 000
Jasne, można argumentować, że możliwa jest dowolna manipulacja ciągiem, datetime dla sprzedaży „12-25-2018 12:34 pm” można podciągać i manipulować wiele razy, aby uzyskać miesiąc i rok. W postaci liczbowej 122520181234 można by podzielić i modulować, i zwielokrotnić, i podzielić jeszcze więcej, i ostatecznie wygenerować miesiąc i rok .. .. ale kod byłby naprawdę trudny do napisania, odczytania, utrzymania i zrozumienia ..
Nawet wyrafinowani optymalizatorzy baz danych mogą nie być w stanie użyć indeksu w kolumnie dla klauzuli where, jeśli forma daty to MM / DD / RRRR, ale zostaną podzielone i poskładane. Dla porównania, przechowywanie reprezentacji RRRRMMDD i oczekiwanie grudnia 2018 r. Prowadzi do tego, gdzie klauzule ilk
dateasstring LIKE '201812%'
lubdateasint BETWEEN 20181200 and 20181299
- coś, co można łatwo zastosować do indeksuZatem jeśli nie istniałby dedykowany typ danych dla dat i reprezentacja łańcuchowa / numeryczna była jedynym wyborem, użycie i przechowywanie czasów w niektórych reprezentacjach najdłuższego przedziału od lewej do najkrótszego przedziału od na Right ma wiele zalet ułatwiających zrozumienie, manipulowanie, przechowywanie, pobieranie i konserwację kodu
źródło