Gibt es einen technischen Grund, warum das voreingestellte Datumsformat bei der Programmierung JJJJMMTT ist und nicht etwas anderes?

118

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?

lucaswxp
quelle
14
@IMil Es gefällt uns vielleicht nicht, aber sie werden häufig als Zeichenfolgen gespeichert.
Honza Brabec
14
@candied_orange Das wäre seltsam, besonders bei Datteln.
Glglgl
43
xkcd.com/1179
Helio
19
Als Randnotiz ist dieses Format nicht so fremd. Zum Beispiel in ungarischer Sprache (und wahrscheinlich auch in einigen anderen) JJJJ. MM. DD. ist das voreingestellte geschriebene Datumsformat und hat vor Computern lange gedauert.
Neinstein
31
In der Programmierung lautet das Standard-Datumsformat "JJJJMMTT"? Es wäre schön, wenn das wahr wäre, aber das ist definitiv nicht überall der Fall. RFC 822 und RFC 850 sowie ANSI-Cs asctimesind 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.
Daniel Pryden

Antworten:

386

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.

Arseni Mourzenko
quelle
90
@lucaswxp: Wenn Sie einen Sonderfallvergleich für Zeichenfolgen schreiben, die einem bestimmten Schema folgen, können Sie ihn natürlich so barock gestalten, wie Sie möchten. Die Sache hier ist, dass das Schema so entworfen ist, dass die lexikalische Reihenfolge (sowie die lexikalische nummerensensitive Reihenfolge) auch eine logische Reihenfolge ist, sodass keine Anpassung erforderlich ist.
Deduplizierer
19
@lucaswxp Ihre Datumszeichenfolge befindet sich möglicherweise nicht im Speicher. Praktisches Beispiel: Sie haben eine CSV-Datei, die bereits nach ISO-Datum und mehreren Millionen Zeilen pro Jahr sortiert ist. Und Sie möchten nur die Zeilen zwischen bestimmten Daten zurückgeben. Sie können die Datei zeilenweise (zeilenweise) lesen, bis Sie Ihr erstes Datum erreicht haben, und dann die Zeilen in den Speicher laden, bis Sie Ihr letztes Datum erreicht haben. Sie können den Rest der Datei überspringen. Wenn Sie das Datum jedoch in einem anderen Format speichern oder nur nach Jahr sortieren, müssen Sie die Datensätze des gesamten Jahres durchlesen, bevor Sie die Datei schließen.
Tom A. Vibeto
48
Beachten Sie, dass die Striche in ISO 8601 sind optional, so YYYYMMDD ist ISO 8601
Martin Ba
32
@Benoit Es wurde bereits ein Vorschlag zur Lösung des Y10K-Problems unterbreitet. Wenn wir dann immer noch dieselbe Ära verwenden, werden wir bis Y100K zu AYYYYMMDD wechseln, was BYYYYYMMDD, CYYYYYYMMDD, DYYYYYYYYMMDD, EYYYYYYYYYMMDD sein wird. Dieses führende Alpha-Präfix stellt die korrekte Sortierreihenfolge sicher (vorausgesetzt, "A0YYYY ..." usw. sind ungültige Darstellungen, wenn noch Datumsangaben für JJJJ ... verwendet werden). Irgendwann, wenn die Anzahl der Jahreszahlen durch drei teilbar ist, werden wir jedes Mal, wenn wir das Alpha-Präfix ändern, drei Ziffern hinzufügen, um sicherzustellen, dass uns vor dem Tod des Universums die Buchstaben nicht ausgehen.
Monty Harder,
35
Es ist wichtig zu beachten, dass das Sortieren mit diesem Format nicht nur "einfacher" ist. Die lexikalische (zeichenbasierte) Sortierung entspricht der zeitlichen Sortierung, dh Sie können zeitlich sortieren, ohne sie zu analysieren .
jpmc26
135

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.)

MSalters
quelle
34
Während Sie Witze machen, wird dieser Code uns in 8000 Jahren möglicherweise ernsthaft verfolgen. Code lebt länger als irgendjemand erwartet ... 😓
täuschen
15
@deceze ISO8601 hat bereits Bestimmungen für ein fünfstelliges Jahr, aber es wäre interessant zu sehen, welche DateTime-Implementierungen dies derzeit zulassen.
Zac Faragher
4
@ZacFaragher, ich bin sicher, wir werden viel Zeit haben, um das später umzusetzen, kein Grund zur Eile, oder?
Ilkkachu
51
@deceze Warum hast du mich aufgetaut - hast du herausgefunden, wie man Krebs heilt? Nein, es ist das Jahr 9999 und Sie kennen COBOL.
user3067860
6
Vielleicht möchten Sie Ihren Tippfehler beheben. Das Wort Jahrtausende , der Plural von Millennium sind obligat mit einem Doppel-N Dinkel den Doppel-N in paßt jährlich aus dem Lateinischen annus für Jahr. Wenn Sie es nur mit einem einzigen N falsch schreiben, stimmt es jetzt unglücklicherweise mit dem einzigen N von Anal aus dem lateinischen Anus überein, und zwar mit der gleichen Bedeutung wie sein Lehnwort für den englischen Sport. Kurz gesagt, Sie müssen es immer so buchstabieren, dass Sie von Tausenden von Jahren sprechen, nicht von Tausenden von Hintern. :)
tchrist
57

Gibt es überhaupt einen Grund?

Ja. Diese Softwareteile verwenden ISO 8601 .

ISO 8601 bietet eine Reihe von Vorteilen gegenüber anderen Datumsformaten:

  • Es ist ein Standard mit einem Spezifikationsdokument :)
  • Es ist eindeutig. MM / TT / JJJJ und TT / MM / JJJJ können verwirrend sein, es sei denn, es ist nach dem 13. Tag.
  • Es wird lexikografisch in aufsteigender Zeitreihenfolge sortiert, sodass keine spezielle Logik zum Sortieren von Datumsangaben erforderlich ist. Dies ist besonders nützlich bei Dateinamen, bei denen die lexikografische Nummernsortierung häufig verwirrend ist (z 1_file, 10_file, 2_file. B. ).
  • Es schreibt ein vierstelliges Jahr und einen mit Nullen aufgefüllten Monat und ein Jahr vor. Dies vermeidet das Jahr-2000-Problem und andere Unklarheiten.

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 .

Obwohl ISO-Empfehlungen und -Normen in diesem Bereich seit 1971 verfügbar sind, wurden in verschiedenen Ländern unterschiedliche Formen der numerischen Darstellung von Datum und Uhrzeit verwendet. Wenn solche Darstellungen über nationale Grenzen hinweg ausgetauscht werden, kann es zu einer Fehlinterpretation der Bedeutung der Ziffern kommen, was zu Verwirrung und anderen daraus resultierenden Fehlern oder Verlusten führt. Der Zweck dieser Internationalen Norm ist es, das Risiko einer Fehlinterpretation zu beseitigen und die Verwirrung und ihre Folgen zu vermeiden.

...

Diese Internationale Norm behält die am häufigsten verwendeten Ausdrücke für Datum und Uhrzeit sowie deren Darstellungen aus früheren Internationalen Normen bei und bietet eindeutige Darstellungen für einige neue Ausdrücke, die in der Praxis verwendet werden. Durch seine Anwendung im Informationsaustausch, insbesondere zwischen Datenverarbeitungssystemen und zugehörigen Geräten, werden Fehler aufgrund von Fehlinterpretationen und die dadurch entstehenden Kosten beseitigt. Die Förderung dieser Internationalen Norm wird nicht nur den Austausch über internationale Grenzen hinweg erleichtern, sondern auch die Portabilität von Software verbessern und Kommunikationsprobleme innerhalb einer Organisation sowie zwischen Organisationen erleichtern.

Die Norm definiert "grundlegende" Variationen als Minimierung der Verwendung von Begrenzern. Ist YYYYMMDDalso die grundlegende Alternative zum erweiterten Format YYYY-MM-DD.

Pod
quelle
4
Ich wusste nicht, dass ISO 8601 neben JJJJJMMTT auch JJJJ-MM-TT zulässt.
keuleJ
iso.org/iso-8601-date-and-time-format.html scheint darauf hinzudeuten, dass das "Erweiterte Format" von JJJJ-MM-TT das einzige Format für 8601 ist?
Oskar Austegard
3
@keuleJ Die Minimierung der Verwendung von Begrenzungszeichen wie JJJJMMTT anstelle von JJJJ-MM-TT wird im ISO 8601-Standard als „grundlegende“ Formatvariation bezeichnet.
Basil Bourque
Zwei weitere Vorteile der ISO 8601: (a) Einfache maschinelle Analyse ohne SPACE-Zeichen und ohne lokalisierten Text und (b) Einfache Intuitivität für den Menschen in allen Kulturen, wobei das erste Jahr leicht zu erkennen ist (wenn es zeitgemäß ist). und ohne die englische Sprache anzunehmen.
Basil Bourque
55

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?)

Pieter B
quelle
14
"20030201 als Datum ist immer klar" : Das ist absolut nicht der Fall. Es ist genauso vieldeutig wie "01/02/2003", es sei denn, Sie wissen, dass JJJJMMTT (oder ist es JJJJTTMM oder TTMMJJJJ? ...) das verwendete Format ist. Sie müssen IMMER das Format des Datums kennen. Es gibt keine "Konvention", die die Dinge eindeutig macht.
Skomisa
6
@skomisa das ist ganz falsch. ISO 8601 hat das internationale Standard-Datumsformat speziell aus den von Ihnen angegebenen Gründen definiert. Keines der anderen Formate ist ein gültiges Datumsformat und wurde seit 19880605
K. Alan Bates,
11
@ K.AlanBates Ihr Datum ist nicht eindeutig, es sei denn, wir gehen davon aus, dass es gemäß ISO 8601 analysiert werden sollte.
Goyo
16
20030201 ist der 20. März 201AD, richtig?
David Richerby
10
@Martijn, aber sprachspezifisch. In der Türkei ist es Şubat anstatt Februar (Bevor Sie glauben, dass Ihr Code funktioniert, überprüfen Sie immer die Türkei ).
NH.
19

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.

Zahbaz
quelle
1
Außer, dass Sie dies niemals als Ganzzahl speichern würden, zumindest habe ich es nie gesehen oder in Betracht gezogen.
Rohr
5
@pipe: Glaub mir, manche Leute würden. Wir unterhalten ein Altsystem, das JJJJMMTT als Ganzzahl speichert. Das Design stammt wahrscheinlich aus einem alten Datenbanksystem ohne expliziten Datumstyp und wurde aus Gründen der Abwärtskompatibilität beibehalten. Es ist nicht hübsch. Tu es nicht.
Heinzi
19
@pipe Es war meine Erfahrung in der Softwareindustrie, dass es immer mindestens ein Gegenbeispiel gibt, wenn eine vernünftige Person sagen möchte "Aber du würdest niemals X machen"
Joseph Rogers,
5
@pipe Beim Data Warehousing ist es nicht ungewöhnlich, eine Ganzzahl vom Typ JJJJMTT als Primär- / Ersatzschlüssel für eine Datumstabelle zu verwenden.
Soapygopher
4
@pipe Nun, die Sequenznummer einer DNS-Zone ist eine 32-Bit-Ganzzahl, die erhöht werden muss, wenn sich die Zone ändert. Während es sich nur um eine einfache Zahl handeln könnte, ist die Verwendung von Zahlen wie 2018092601 eine gebräuchliche Redewendung ... Dann gibt es einige merkwürdige Definitionen von magischen Zahlen, die in beschrieben sind feature_test_macros(7), wie beispielsweise das Vorhandensein von _POSIX_C_SOURCE > 200809LMitteln, die Funktionen von POSIX.1-2008 unterstützen ...
Ilkkachu
12

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.

Martin
quelle
7

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.

Joel Coehoorn
quelle
62
Vielleicht möchten Sie "unsere Kultur" umformulieren, weil es in meiner Kultur DDMMYYYY ist, also nicht nur Ihre "unsere" Kultur
slebetman
66
Umfassende Karte aller Länder, die das MMDDYYYY-Datumsformat verwenden img-9gag-fun.9cache.com/photo/a2mXmGd_700b.jpg
Peregrine
9
Es scheint ein seltsames Argument zu sein: "Monate ändern sich gerade schnell genug, um ihre Bedeutung beizubehalten" -> Warum nicht den Tag an die erste Stelle setzen, da sich dies noch schneller ändert?
Wim Deblauwe
7
@JoelCoehoorn, das lässt sich leicht explizit ausdrücken ("In unserer US-Kultur"). "unser" / "wir" wird hier oft als "Stack-Exchange-Community" bezeichnet.
AnoE
14
Genau. Stackoverflow ist international . Dass Sie in den USA ansässig sind, bedeutet nicht, dass dies auch bei anderen der Fall ist. Sie können hier keine Vermutung über die Lokalität Ihrer Leser anstellen, sie sind auf der ganzen Welt. Und die meisten Ihrer Leser sind weder Sie noch das OP, sondern andere Personen, die Ihre Antwort bei Google finden. Dieser Kommentar ist auf einem anderen Kontinent geschrieben als dem, auf dem Sie gerade leben. Und obwohl wir unsere eigenen - ähm - interessanten Gewohnheiten haben, verwenden wir hier mit Sicherheit nicht MM / TT / JJJJ ...
cmaster
6

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.

mckenzm
quelle
5

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.

WolfgangGroiss
quelle
4

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.

Mrvinent
quelle
3
Kein wirklich gutes Argument - es ist genauso üblich, nach Dingen zu suchen, die eher in bestimmten Monaten als in bestimmten Jahren geschehen.
Cubic
1
Wenn 1970*und 197005*„glob“ Wildcard - Syntax darstellt, dann könnte man eine Reihe von MMTTJJJJ Daten suchen , indem für die glob Suche *1970oder 05*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.
Quuxplusone
3
Dies ist eine Art Nebeneffekt oder eine andere Art, die in anderen Antworten genannte Sortierschlüsselreihenfolge zu beschreiben. Diese Erklärung fällt jedoch auseinander, es sei denn, Sie beschränken sich auf die Suche nach Präfixen. (Einfacher zu indizieren, aber keinesfalls erforderlich).
Peter Cordes
Es bedeutet auch, dass Sie eine Folge von Daten mit relativ einfachen regulären Ausdrücken auswählen können ...
Harper
1

Warum bei der Programmierung das voreingestellte Datumsformat JJJJMMTT ... ist

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.

rauben
quelle
1
Tatsächlich bevorzugen fast alle Menschen und Software, denen ich jemals begegnet bin, ein anderes Format.
Goyo
1
Schön Sie zu treffen! Ich bin Dave und bevorzuge YYYYMMDD
Reversed Engineer
0

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.

Ben
quelle
2
Es ist trivial, ein Datum in drei Bytes zu packen. Der Bereich 0000 - 9999 erfordert 14 Bit, 01 - 12 4 Bit und 01 - 31 5 Bit für eine Summe von 23 Bit. Wenn Sie auch das verbleibende Bit in einer Drei-Byte-Menge verwenden, können Sie Daten über einen Zeitraum von 32.768 Jahren darstellen, wobei Sie eine eintägige Auflösung beibehalten. Dies könnte beispielsweise verwendet werden, um die Darstellung von Daten im Bereich von 8191 v. Chr. Bis 24576 n. Chr. Zu ermöglichen. Wenn Sie die Bits beispielsweise als yyyyyyyyyyyyyyymmmmddddd packen, bleibt die Dezimaldarstellung direkt vergleichbar (obwohl sie nicht direkt vom Menschen lesbar ist, aber wen interessiert die physische Speicherung der Datenbank?).
einen Lebenslauf vom
0

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%dim strftimeSprachgebrauch) 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)

date

Ausgabe:

Wed Sep 26 22:20:57 CEST 2018

Python

import time
print(time.ctime())

Ausgabe:

Wed Sep 26 22:27:20 2018

C

#include <stdio.h>
#include <time.h>

int main () {
   time_t curtime;

   time(&curtime);
   printf(ctime(&curtime));
   return(0);
}

Ausgabe:

Wed Sep 26 22:40:01 2018

C ++

#include <ctime>
#include <iostream>

int main()
{
    std::time_t result = std::time(nullptr);
    std::cout << std::ctime(&result);
}

Ausgabe:

Wed Sep 26 22:51:22 2018

Javascript

current_date = new Date ( );
current_date;

Ausgabe:

Wed Sep 26 2018 23:15:22 GMT+0200 (CEST)

SQLite

SELECT date('now');

Ausgabe:

2018-09-26

LibreOffice Calc

Bildbeschreibung hier eingeben

Gnumeric

Bildbeschreibung hier eingeben

OnlyOffice

Bildbeschreibung hier eingeben

Python + Numpy

import numpy as np
pd.datetime64('now')

Ausgabe:

numpy.datetime64('2018-09-26T21:31:55')

Python + Pandas

import pandas as pd
pd.Timestamp('now', unit='s')

Ausgabe:

Timestamp('2018-09-26 21:47:01.277114153')

Softwareentwicklung

Bildbeschreibung hier eingeben

apport.log

ERROR: apport (pid 9742) Fri Sep 28 17:39:44 2018: called for pid 1534, signal 6, core limit 0, dump mode 2

alternatives.log

update-alternatives 2018-05-08 15:14:24: run with --quiet --install /usr/bin/awk awk /usr/bin/mawk 5 --slave /usr/share/man/man1/awk.1.gz awk.1.gz /usr/share/man/man1/mawk.1.gz --slave /usr/bin/nawk nawk /usr/bin/mawk --slave /usr/share/man/man1/nawk.1.gz nawk.1.gz /usr/share/man/man1/mawk.1.gz

Tassen / access.log

localhost - - [28/Sep/2018:16:41:58 +0200] "POST / HTTP/1.1" 200 360 Create-Printer-Subscriptions successful-ok

Syslog

Sep 28 16:41:46 pop-os rsyslogd:  [origin software="rsyslogd" swVersion="8.32.0" x-pid="946" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Goyo
quelle
10
Um Ihrem Argument hinzuzufügen, wie viele von ihnen sind aufgrund der Benutzereinstellungen auf dem Computer, auf dem Sie den Scrip ausgeführt haben, auf diese Weise formatiert?
Topher Brink
Das erste ist nicht wirklich "bash", es ist das Datumsprogramm (und es wird Do 27. Sep 22:27:09 CEST 2018hier
ausgegeben
@ PaŭloEbermann Du hast recht, ich hoffe es ist jetzt besser. Wie ich bereits sagte, sind viele dieser Formate lokalisiert, sodass das tatsächlich angezeigte Format von Ihren Lokalisierungsoptionen abhängt.
Goyo
3
Der Sinn dieser Antwort gilt zwar für Endbenutzer-orientierte Apps, nicht jedoch für den Datenaustausch zwischen Systemen, die Datenserialisierung, Nachrichten- / Datenprotokolle, Protokollierung, Ablaufverfolgung, Debugger usw. Der ISO 8601-Standard wird schnell zur Norm für solche Anwendungen, die sich an Systemadministratoren und Programmierer richten. Das Gleiche gilt für internationale oder landesunabhängige Szenarien.
Basil Bourque
@BasilBourque Danke, ich habe eine zufällige Stichprobe der Protokolle hinzugefügt, die ich in meinem eigenen System gefunden habe. Ich habe keine Beispiele für die anderen Typen zur Hand. Ich glaube jedoch nicht, dass der Trend, in bestimmten Bereichen auf ISO 8601 zurückzugreifen, seine Grundvariante zum "Standard in der Programmierung" macht, angesichts der enormen Menge an Software, die standardmäßig andere Formate verwendet.
Goyo
-1

Ein 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 ilkdateasstring LIKE '201812%' oder dateasint BETWEEN 20181200 and 20181299-, für die ein Index leicht verwendet werden kann

Wenn 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

Caius Jard
quelle