413 Stimmen

JSON Datum- und Uhrzeit zwischen Python und JavaScript

Ich möchte ein datetime.datetime-Objekt in serialisierter Form von Python aus mithilfe von JSON senden und in JavaScript unter Verwendung von JSON de-serialisieren. Wie ist der beste Weg, dies zu tun?

0 Stimmen

Bevorzugen Sie die Verwendung einer Bibliothek oder möchten Sie dies selbst codieren?

1voto

Patrick Punkte 351

Für die Python-zu-JavaScript-Datenumwandlung muss das Datum-Objekt in einem spezifischen ISO-Format vorliegen, d. h. im ISO-Format oder Unix-Nummer. Wenn das ISO-Format einige Informationen fehlen, können Sie es zunächst mit _Date.parse()_ in die Unix-Nummer umwandeln. Darüber hinaus funktioniert Date.parse auch mit React, während ein neues Date eine Ausnahme auslösen könnte.

Falls Sie ein DateTime-Objekt ohne Millisekunden haben, sind folgende Punkte zu beachten:

  var unixDate = Date.parse('2016-01-08T19:00:00')
  var desiredDate = new Date(unixDate).toLocaleDateString();

Das Beispiel-Datum könnte ebenfalls eine Variable im result.data-Objekt nach einem API-Aufruf sein.

Für Optionen zur Anzeige des Datums im gewünschten Format (z. B. zur Anzeige langer Wochentage) werfen Sie einen Blick auf die MDN-Dokumentation.

0 Stimmen

Gibt es eine Möglichkeit, dies wie Python für Arrays zu tun? Ich habe ein Array von Datumszeit-Objekten und möchte die Stunde abschneiden.

0 Stimmen

Was ist eine "Unix-Nummer"? Unix-Zeit?

0voto

cagney Punkte 417

Scheinbar ist das "richtige" JSON (nun ja JavaScript) Datumformat 2012-04-23T18:25:43.511Z - UTC und "Z". Ohne dieses wird JavaScript die lokale Zeitzone des Webbrowsers verwenden, wenn ein Date() Objekt aus dem String erstellt wird.

Für eine "naive" Zeit (was Python eine Zeit ohne Zeitzone nennt und dies als lokal annimmt), wird untenstehend die lokale Zeitzone erzwungen, damit sie dann korrekt in UTC konvertiert werden kann:

def default(obj):
    if hasattr(obj, "json") and callable(getattr(obj, "json")):
        return obj.json()
    if hasattr(obj, "isoformat") and callable(getattr(obj, "isoformat")):
        # Datum/Zeit Objekte
        if not obj.utcoffset():
            # füge lokale Zeitzone zu "naiver" lokaler Zeit hinzu
            # https://stackoverflow.com/questions/2720319/python-figure-out-local-timezone
            tzinfo = datetime.now(timezone.utc).astimezone().tzinfo
            obj = obj.replace(tzinfo=tzinfo)
        # konvertiere in UTC
        obj = obj.astimezone(timezone.utc)
        # entferne den UTC Offset
        obj = obj.replace(tzinfo=None)
        return obj.isoformat() + "Z"
    elif hasattr(obj, "__str__") and callable(getattr(obj, "__str__")):
        return str(obj)
    else:
        print("obj:", obj)
        raise TypeError(obj)

def dump(j, io):
    json.dump(j, io, indent=2, default=default)

Warum ist das so schwer.

0voto

Einfach dies tun:

r = json.dumps(your_json_data, default=str)
your_json_data = json.loads(r)

Bildbeschreibung eingeben

0 Stimmen

Bitte überprüfen Sie Warum keine Bilder von Code/Fehlern hochladen, wenn man eine Frage stellt? (z.B. "Bilder sollten nur verwendet werden, um Probleme zu veranschaulichen, die auf keine andere Weise klar gemacht werden können, wie zum Beispiel Bildschirmfotos einer Benutzeroberfläche bereitzustellen.") und das Richtige tun (es deckt Antworten und Textein-/ausgabe ab). Danke im Voraus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X