unix timestamp oder yymmddhhmmss?


05.07.2022, 18:14

und wie sollte ich die zahl in der mysql datenbank abspeichern? bisher habe ich es als ganz normaler int gespeichert

Das Ergebnis basiert auf 13 Abstimmungen

1656992044 54%
... 38%
220705053544 8%

10 Antworten

...

deine Frage verstehe ich nicht.
Wo willst du Zeitangaben verwenden?

Du nennst timestamp, was auf Datumsangaben wie CreationTime, Modification-Time .. hindeutet.
Unix verwendet dafür 32 Bit und die werden dann als Dezimalzahl ( 1656992044 ) dargestellt.

Genauere Angaben lassen sich dann in einem Unix-/Linux-Filesystem nicht machen.
Außerhalb eines Filesystems können Zeiten aber auch als Millisekunden und Mikrosekunden gespeichert werden.
Das sind dann Zeiten ab dem 01.01.1970 00:00 Uhr

Dummerweise kann man mit anderen Darstellungen, die zwar für den Menschen lesbar sind, kaum rechnen.
Ich habe mit beim Programmieren angewöhnt, alles in die 32-Bit-Form zu wandeln und dann bei zu lesenden Anzeigen zurück in [yy]yymmddhhmmss.

1656992044

Datenformate sind nicht dafür da, gut von Menschen gelesen werden zu können.

Viel wichtiger ist, das man sie gut verarbeiten kann.

Sowas wie

Datum - Datum

oder

Datum + Zeit

geht in diesem Format wesentlich besser.

wer milisekunden brauch , brauch millisekunden , wer sie nicht brauch bleibt bei sekunden .

wer datum braucht braucht datum

ist da was unklar ?

...

Das kommt darauf an, wo du das verwendest. Wenn du mit dem Datum rechnen willst (in PHP/JS), dann den Unix-Timestamp. Um es dem Benutzer anzuzeigen, zur Not yymmdd.. oder eben richtig dekodiert.

In einer Datenbank keines von beiden, sondern deren nativen DATETIME Typ. Nur damit kannst du direkt in der DB mit dem Datum arbeiten und so was wie YEAR, MONTH, DATEADD, etc. verwenden. Beim schreiben in die DB kannst du ggf. FROM_UNIXTIME oder beim Lesen UNIX_TIMESTAMP oder DATE_FORMAT verwenden, wenn du das in PHP so weiterverarbeiten willst.

Woher ich das weiß:Berufserfahrung – Softwareentwickler & Admin

Mensch4 
Fragesteller
 05.07.2022, 18:13

ich brauche es zum einen um damit zu rechnen und zum anderen um es später wieder als datum anzuzeigen, bisher habe ich es immer so gemacht, dass zum beispiel eine einfache if abfrage reicht um zu sagen welche tahl größer ist und somit welches datum weiter vorne liegt, bei unix weiß ich nicht genau wie man das wieder zurückrechnet

0
iQa1x  06.07.2022, 19:15
@Mensch4

Rechnen ist tricky, wenn du noch Daten hast, die vor dem 1.1.1970 liegen (Geburtsdatum, etc.) ist der Unix-Timestamp da ziemlich Mist.

DATETIME Spalten in der DB kannst du direkt vergleichen, oder auch mal sowas mit WHERE datumsspalte>DATESUB(NOW(), INTERVAL 1 MONTH) direkt im SQL bauen. Die mySQL Datumsfunktionen findest du in der Doku.

Unix-Timestamp nach Datum geht in PHP mit date, in JS mit dem Date-Objekt, wobei du da evtl. irgendwo mit 1000 multiplizieren musst, weil die Millisekunden statt Sekunden wie PHP/Unix nehmen.

0

yymmddhhmmss ist ja nicht eindeutig, könnte ja auch das Jahr 2122 sein.

Würde ich daher in keinem Fall verwenden.


Mensch4 
Fragesteller
 05.07.2022, 18:07

naja ich glaube ich würde das programm schon irgendwann in den nächsten 75 Jahren updaten ;)

0
jort93  05.07.2022, 18:56
@Mensch4

Glaubten die leute in den 60ern auch, und dann haben sie es nicht gemacht...

1
Mensch4 
Fragesteller
 05.07.2022, 18:57
@jort93

echt? welches programm denn?

0
jort93  05.07.2022, 18:59
@Mensch4

Damals waren Programme noch auf den einzelnen Rechner zugeschnitten, speziell für ein Unternehmen. Die Programme wurden damals nicht vertrieben, vervielfältigt oder ähnliches, die existierten oft nur auf genau einem Computer.

0
jort93  05.07.2022, 19:01
@Mensch4

Man würde ja meinen dass wir bei Speichermedien mittlerweile so weit sind dass man da nicht jeden einzelnen bit Zählen muss. Da kann man sich auch mal gönnen und das ganze Datum speichern.

0
jort93  05.07.2022, 19:16
@Mensch4

ISO 8601, wohl der verbreitetste standard für Datumsangaben, z.B. erlaubt kein zweistelliges Jahr.

Bzw. tut es schon, aber nicht so wie du denkst. Da würde die Jahresangabe "22" die Zeit zwischen den Jahren 2200 und 2299 bezeichnen.

0