Gibt es einen technischen Grund dafür? Ich habe mich bei einem RDBMS gefragt, ob es etwas mit der Leistung zu tun hat, da ein "JAHR" zum Beispiel spezifischer ist als ein "MONAT": Sie haben nur ein Jahr 2000, aber jedes Jahr einen "Januar". Das würde es einfacher / schneller machen, etwas zuerst nach Jahr zu filtern / sortieren, und deshalb steht das Jahr an erster Stelle.
Aber ich weiß nicht, ob das wirklich Sinn macht ... Gibt es überhaupt einen Grund?
sql
engineering
rdbms
date-format
lucaswxp
quelle
quelle
asctime
sind an vielen Orten noch weit verbreitet. Es ist schön, dass RFC 3339 und ISO 8601 die älteren Formate allmählich verdrängen, und sie sind auf jeden Fall das, was in Zukunft verwendet werden sollte. Allgemeiner würde ich sagen, dass die ISO 8601-Grundform (JJJJMMTT ohne Trennzeichen) tatsächlich weniger verbreitet ist als einige andere Formen, wie JJJJ-MM-TT.Antworten:
Auf diese Weise können die Daten mithilfe der Standardsortierregeln (z. B. lexikografische Sortierung ) einfach als Zeichenfolgen sortiert werden .
Dies ist auch der Grund, warum sowohl Monat als auch Tag zweistellig angegeben werden (ggf. eine führende Null hinzufügen).
Tatsächlich ist es eines der von ISO 8601 definierten Datumsformate . Dieser Standard definiert auch ein Datums- und Uhrzeitformat
2015-03-27T15:26:40Z
, das auch als Zeichenfolge sortiert werden kann.JJJJMMTT bietet jedoch den zusätzlichen Vorteil, dass die Zeichenfolge auf einfache Weise (ohne dass Teilzeichenfolgen oder Zeichenersetzungen erforderlich sind) als Ganzzahl analysiert werden kann und die Standardreihenfolge für Ganzzahlen weiterhin verwendet wird.
quelle
Noch nicht erwähnt, aber Sie beschönigen schnell die Bestellung innerhalb von JJJJ. Das sind schon Jahrtausende, Jahrhunderte, Jahrzehnte, Jahre. Das heißt, JJJJ ist bereits vom längsten zum kürzesten Zeitraum bestellt. Das gleiche gilt für MM und DD, genau so funktioniert das Zahlensystem.
Damit die Reihenfolge zwischen den Feldern mit der Reihenfolge innerhalb der Felder übereinstimmt , ist die einzige Option JJJJMMTT.
Wie Zahbaz und Arseni Mourzenko feststellten, lassen sich die Formate JJJJMMTT leicht sortieren. Das ist kein Zufall, sondern eine direkte Folge davon, dass die Felder mit der längsten Dauer an erster Stelle stehen (und die Länge unverändert bleibt; wir führen hier ein Y10K-Problem ein.)
quelle
Ja. Diese Softwareteile verwenden ISO 8601 .
ISO 8601 bietet eine Reihe von Vorteilen gegenüber anderen Datumsformaten:
1_file, 10_file, 2_file
. B. ).Der Grund für die Existenz von ISO 8601 liegt darin, dass beim Datenaustausch zwischen Ländern / Systemen Datumsformate mehrdeutig und verwirrend waren und eindeutige Anforderungen gestellt wurden.
Für die Begründung siehe die Einführung der Spezifikation .
Die Norm definiert "grundlegende" Variationen als Minimierung der Verwendung von Begrenzern. Ist
YYYYMMDD
also die grundlegende Alternative zum erweiterten FormatYYYY-MM-DD
.quelle
Das liegt daran, dass alle anderen Möglichkeiten nicht eindeutig sind.
01/02/2003 was bedeutet das? 2. Januar 2003? Oder in Europa: 1. Februar 2003? Es wird noch schlimmer, wenn Sie zwei Ziffern für das Jahr als 01/02/03 verwenden.
Aus diesem Grund verwenden Sie JJJJMMTT. Dies ist die Konvention, die es uns ermöglicht, klar über Daten zu kommunizieren. 20030201 als Datum ist immer klar. (und es macht es einfacher zu sortieren)
(Speichern Sie das jetzt nicht als ganze Zahl 20 Millionen 30 Tausend 2hundertund1. Bitte, ok? Ziemlich, bitte?)
quelle
Sei t1 und t2 verschiedene Ganzzahlen, die zwei in JJJJMMTT-Formatierung geschriebene Zeiten darstellen. Dann impliziert t1 <t2, dass t2 nach t1 aufgetreten ist.
Sie verlieren diese Reihenfolge mit der ersten Formatierung von DD und MM.
ISO ist, IMO, das einzig sinnvolle Format.
quelle
feature_test_macros(7)
, wie beispielsweise das Vorhandensein von_POSIX_C_SOURCE > 200809L
Mitteln, die Funktionen von POSIX.1-2008 unterstützen ...Ein Punkt, der nicht erwähnt wird, ist, dass dieses Format bei interaktiven Eingaben die Steuerung der Eingabe ermöglicht.
Das System kann nicht wissen, ob ein Monat 28, 29, 30 oder 31 Tage hat, ohne das spezifische Jahr und den spezifischen Monat zu kennen. Wenn die interaktiven Eingabemandate für das Jahr und den Monat an erster Stelle stehen, kann geprüft werden, ob der zuletzt eingefügte Tag im zulässigen Bereich liegt.
Zugegeben, die Frage betraf hauptsächlich das Datumsformat, aber es kann argumentiert werden, dass das Datumsformat der Formatierung folgt, die dem Benutzer präsentiert wird.
quelle
JJJJMMTT Bestellungen werden auf die gleiche Weise ausgeführt wie Bestellungen von Nummern: der wichtigste Teil zuerst. MMDDYYYY würde bedeuten, "einhundertdreiundzwanzig" als "einundzwanzig und dreiundzwanzig" zu schreiben.
In unserer Kultur haben wir ein natürliches Verständnis von MMDDYYYY, weil wir als Menschen ein Zeitbewusstsein haben und Jahre nur langsam voranschreiten. Wir wissen im Allgemeinen, in welchem Jahr es ist. Das Jahr zu sehen ist selten wichtig, deshalb schieben wir es nach hinten. Monate ändern sich gerade schnell genug, um ihre Bedeutung beizubehalten. Andere Kulturen gehen anders damit um. Ein Großteil der Welt bevorzugt TTMMJJJJ.
quelle
Die Sortierung wurde erwähnt, aber der mit Abstand nützlichste Grund dafür ist, sie als "Zeichenfolgen" zu vergleichen, und ja, ein 26-stelliger Zeitstempel wird ähnlich angeordnet.
Ich bin mir bewusst, dass solche Vergleiche für die Sortierung unerlässlich sind, aber sie sind im Allgemeinen für eine Sortierung mit zwei Elementen nützlich.
Ich habe an Projekten gearbeitet, in denen dies nicht übernommen wurde, und ja, Programmierer haben (mit gemischten Ergebnissen) versucht, die Daten als Zeichenfolgen zu vergleichen.
Hübsche Formatierung ist für die Client-Seite oder den Satz.
quelle
Bei diesem Format ist die alphabetische Reihenfolge der Zeichenfolgen identisch mit der chronologischen Reihenfolge der Datumsangaben. Dies ist nützlich, da viele Tools eine alphabetische Sortierung von z. B. Dateien nach Namen bieten, jedoch keine Möglichkeit, willkürlich formatierte Daten aus Dateinamen zu analysieren und nach diesen zu sortieren.
quelle
Es geht um Restriktivität. Stellen Sie sich YEAR, MONTH und DAY als Parameter vor. Im Format YYYYMMDD ist jeder Parameter restriktiver als der vorherige.
Wenn Sie also nach etwas suchen möchten, das 1970 passiert ist, können Sie es tun, indem Sie eine Zeichenfolge suchen, die mit beginnt.
"1970*"
Wenn Sie sich jedoch erinnern, welcher Monat der Monat war, können Sie den Monat wie hinzufügen"197005*"
. Auf diese Weise liefert jeder "Parameter" des Datums genauere Informationen.Dies ist der einzige Weg, um von weniger spezifischen Informationen (
"1970*"
) zu spezifischeren Informationen ("19700523"
) zu gelangen.quelle
1970*
und197005*
„glob“ Wildcard - Syntax darstellt, dann könnte man eine Reihe von MMTTJJJJ Daten suchen , indem für die glob Suche*1970
oder05*1970
. Ihre Antwort setzt möglicherweise implizit eine zusätzliche Einschränkung voraus, die Sie nicht explizit erwähnt haben, und kann durch Erläuterung Ihrer Annahme verbessert werden.Es ist ein für Menschen lesbares Format für Ein- und Ausgabe, es muss nicht so gespeichert sein.
Über ein Drittel aller Programmiersprachen wurde in einem Land entwickelt, in dem Englisch die Hauptsprache ist, und die meisten modernen Sprachen halten sich an einen Standard mit einer gewissen Beschreibung - der internationale Standard für Datumsangaben ist ISO 8601 .
Weitere Infos: (TMI?)
Wenn sich die Zeit ändert, in der Regel vorwärts, werden zuerst die Tage, dann die Monate und zuletzt die Jahre erhöht - es ist möglicherweise einfacher zu verstehen, ob wir Dezimaldaten (und die Dezimalzeit ) hatten -, wenn die Zeit vergeht, wird die Zahl größer. Für Menschen ist es einfach einfacher, die Nummer auf einen Blick zu betrachten und mit einem anderen Datum zu vergleichen.
Dem Computer ist es egal, welche Struktur Sie verwenden möchten, und in den meisten (aber nicht allen ) Computern wird Binärlogik verwendet - Base E weist zwar die niedrigste Grundökonomie auf , ist jedoch für eine vollständige Sequenz nicht die effizienteste und einfachste .
Das tatsächliche Ein- und Ausgabeformat für Daten variiert je nach Land und wird durch gesetzt Lokalisierung , während YYYYMMDD kann am meisten Sinn zu machen scheint , und das , was Sie verwendet werden , um es nicht universal ist heute, noch war es auf diese Weise in der Vergangenheit für die längste Zeit, doch noch heute römische Zahlen sind für Termine häufig verwendet .
Wenn Sie das Jahr im Voraus kennen, wissen Sie, wie viele Tage im Jahr vergangen sind. Dies ist die größte Variation in der Dauer , die ein Jahr durchmachen kann. Hier erfahren Sie im Voraus, wie viele Tage pro Monat (zur Fehlerprüfung bei der Eingabe) zu folgen sind. Wenn Sie die Eingabe des ersten Tages zulassen, müssen Sie möglicherweise eine Sicherungskopie erstellen, wenn das folgende Jahr nicht mit Ihrer Eingabe übereinstimmt. Dies erschwert möglicherweise den Zugriff auf die Eingabe . Dies ist auch im Hinblick auf das Kalenderformat von Bedeutung . Siehe auch den Geek-Kalender mit seinen Dezimalstardaten.
Für den Computer wird wahrscheinlich die UNIX-Epochenzeit verwendet , die Anzahl der Sekunden, die seit dem Donnerstag, dem 1. Januar 1970, 00:00:00 UTC (Coordinated Universal Time) vergangen sind, in der jeder Tag so behandelt wird, als ob er Zeit enthält genau 86400 Sekunden. Siehe auch den Julianischen Tag . Das Format JJJJMMTT wird von egozentrischen Menschen einfach bevorzugt, die IAU betrachtet ein Jahr als julianisches Jahr mit 365,25 Tagen (31,5576 Millionen Sekunden), sofern nicht anders angegeben.
quelle
Eine andere Verwendung, die ich für diese Darstellung gesehen habe, besteht darin, dass Sie Datumsangaben als Ganzzahlen (dh in einer Datenbank) mit nur 4 Bytes pro Datum speichern können. Die Verwendung von JJJJMMTT bedeutet dann, dass ganzzahlige Vergleiche (häufig ein einzelner Maschinenbefehl) dasselbe Ergebnis haben wie Vergleiche am dargestellten Datum. Und es druckt mäßig lesbar. Und all dies erfordert überhaupt keinen Code oder spezielle Unterstützung in einer Mainstream-Programmierumgebung.
Wenn diese Dinge das meiste sind, was Sie mit Datumsangaben tun müssen, und Sie viel davon tun müssen, dann hat dieses Format eine Menge Anziehungskraft.
Im Vergleich dazu benötigen Datumsangaben in gängigen Formaten wie TT / MM / JJJJ 10 Byte als Zeichenfolge aus ASCII-Zeichen. YYYYMMDD-Zeichenfolgen reduzieren diesen Wert auf 8 und erzielen den Vorteil, dass der Vergleich der Darstellungen mit dem Vergleich der Datumsangaben identisch ist, der auf Zeichenfolgen basierende Vergleich erfolgt jedoch zeichenweise und nicht durch einen einzelnen Ganzzahlvergleich.
quelle
Aus demselben Grund besteht der Mond aus grünem Käse: Er ist es nicht. In den meisten Fällen ist das Standardformat eine lokalisierte Zeichenfolge. Manchmal wird das ISO-Format verwendet, normalerweise jedoch zur besseren Lesbarkeit mit Bindestrichen.
YYYYMMDD
(oder%Y%m%d
imstrftime
Sprachgebrauch) ist selten die Standardeinstellung. Um fair zu sein, ich bin mir sicher, dass ich es gesehen habe, aber mir fällt gerade kein Beispiel ein.Unix-Datum (GNU-Kerndienstprogramme)
Ausgabe:
Python
Ausgabe:
C
Ausgabe:
C ++
Ausgabe:
Javascript
Ausgabe:
SQLite
Ausgabe:
LibreOffice Calc
Gnumeric
OnlyOffice
Python + Numpy
Ausgabe:
Python + Pandas
Ausgabe:
Softwareentwicklung
apport.log
alternatives.log
Tassen / access.log
Syslog
quelle
Do 27. Sep 22:27:09 CEST 2018
hierEin zusätzlicher Vorteil, der bisher nicht erwähnt wurde, besteht darin, dass die gewünschte Quantisierung (Zuweisen eines genauen Wertes zu demselben allgemeinen Wertebereich) eine relativ einfache und schnelle Einzeloperation ist.
Angenommen, Sie schreiben einen Bericht, in dem die heutigen Ereignisse wie Summe und Anzahl der Verkäufe zusammengefasst sind. Das Datum und die Uhrzeit des Verkaufs werden als JJJJMMTTHHMUT gespeichert. Sie müssen lediglich die 8 Zeichen ganz links (wenn es sich um eine Zeichenfolge handelt) oder den ganzzahligen Teiler (dh die Etage) durch 1.000.000 teilen, um die Datumszeit auf den Tag des Verkaufs zu reduzieren.
Wenn Sie den Umsatz des Monats ermitteln möchten, behalten Sie nur die sechs Ziffern ganz links bei oder dividieren durch 100.000.000
Sicher, Sie könnten argumentieren, dass jede Manipulation von Strings möglich ist. Eine Datumszeit für Verkäufe von "12-25-2018 12:34 pm" könnte mehrfach angegeben und manipuliert werden, um den Monat und das Jahr zu erhalten. In numerischer Form könnte 122520181234 geteilt und modifiziert und multipliziert und noch mehr geteilt werden und schließlich auch einen Monat und ein Jahr hervorbringen. Aber der Code wäre wirklich schwer zu schreiben, zu lesen, zu warten und zu verstehen.
Und selbst hochentwickelte Datenbankoptimierer sind möglicherweise nicht in der Lage, einen Index für eine Spalte für eine where-Klausel zu verwenden, wenn das Datumsformular MM / TT / JJJJ lautete, aber zerschnitten und wieder zusammengesetzt wurde. Im Vergleich dazu führt das Speichern einer YYYYMMDD-Darstellung und der Wunsch nach Dezember 2018 zu where-Klauseln des Typs ilk
dateasstring LIKE '201812%'
oderdateasint BETWEEN 20181200 and 20181299
-, für die ein Index leicht verwendet werden kannWenn es also keinen dedizierten Datentyp für Datumsangaben und Zeichenfolge / numerische Darstellung gab, war die einzige Wahl, die Zeiten in einer Darstellung des längsten Intervalls von links bis zum kürzesten Intervall zu speichern. Recht hat eine Reihe von Vorteilen für das einfache Verständnis, die Manipulation, das Speichern, Abrufen und die Pflege von Code
quelle