Schreiben und Lesen Datetime binary-format in Python

Ich wollen speichern Sie eine Liste von datetimes in eine binäre Datei in Python.

EDIT: von "binary" ich meine, die beste digitale Darstellung für jeden Datentyp. Die Anwendung HIERFÜR ist zum speichern von GPS-Track-Punkte, komponiert von (unix-timestamp, Breitengrad, Längengrad, Höhe), so ist die ganze Struktur ist little-endian "Long, float, float, float", mit vier bytes pro Wert.

HINWEIS: ich benutze nicht die "unix-timestamp" aufgrund einer zuneigung zu den Unix-Plattform, sondern nur eine eindeutige Möglichkeit dar, den Wert einer datetime.

Derzeit bin ich dabei, wie Sie den code unten, aber neben einigen Zeitzone Verwirrung, ich bin immer noch dabei, (meine Zeitzone -3), ich glaube, dass die Umwandlung zu int - und zurück vielleicht nicht der richtige Weg sein, da datetime und datetime64 werden native Typen, die in python/numpy, wenn ich mich nicht Irre. So ein datetime64 müssten acht bytes, statt der vier, die ich benutze für die (lange)unix-timestamp.

import datetime
import calendar
import struct

now = datetime.datetime.now()
print now

stamp = calendar.timegm(now.utctimetuple())
print stamp

binarydatetime = struct.pack('<L', stamp)
recoverstamp = struct.unpack('<L', binarydatetime)[0]
print recoverstamp

recovernow = datetime.datetime.fromtimestamp(recoverstamp)
print recovernow

Also die wichtigste Frage ist: "ist das die pythonic way-Konvertierung von naiven datetime in Binär und zurück?"

Und die zweite Frage ist: "wenn alles, was in diesem code sollte so naiv sein, warum habe ich eine timezone offset?"

Vielen Dank für das Lesen!

  • Definieren 'binary' hier. Was andere software erwarten Sie für die Zusammenarbeit mit? Es gibt keine standard -, pro se, speichern datetime in binären Formaten, die meisten software-wählen Sie Ihre eigene bevorzugte format, die möglicherweise oder möglicherweise nicht werden, basierend auf der UNIX-Epoche.
  • Ich möchte die Datentypen werden in eine Datei geschrieben in einer Sprache und Plattform-unabhängige Weise. Siehe mein edit!
  • betrachten sqlite-Datenbank, die als portable Binärformat zum speichern von gps-Track-Punkte mit der systemeigenen datetime-Typ für die utc - (oder gps -) Zeit.
InformationsquelleAutor heltonbiker | 2013-08-29
Schreibe einen Kommentar