2017-09-20 2 views
1

Ich möchte einen Zeitstempel und die aktuelle Zeitzone erfassen und in eine Datei serialisieren (in JSON oder YAML, aber das ist nicht wirklich meine Frage) für den späteren Abruf auf einem anderen Computer.Wie soll ich ein dateutil.tz.tzlocal Objekt serialisieren?

Der Zeitstempel ist einfach, ich verwende einfach time.time().

Für die aktuelle Zeitzone bekommen, las ich another SO question und es scheint angemessen dateutil.tz.tzlocal zu verwenden, um die aktuelle Zeitzone zu erhalten.

Jetzt muss ich nur herausfinden, wie man es serialisiert. Der Name ist einfach, das ist nur eine Zeichenfolge, aber der Offset scheint seltsam zu sein; Ich hatte erwartet, nur eine Zahl:

import time 
import datetime 
import dateutil 

now = datetime.datetime.utcfromtimestamp(time.time()) 
tzlocal = dateutil.tz.tzlocal() 
print tzlocal.tzname(now) 
print tzlocal.utcoffset(now) 

aber druckt

US Mountain Standard Time 
-1 day, 17:00:00 

und das Ergebnis der UTCOFFSET erscheint ein Objekt zu sein. Wie bekomme ich nur die Nummer?

Antwort

1

Oh, das macht nichts, tzlocal.utcoffset(now) gibt ein datetime.timedelta und ich kann total_seconds() einfach anrufen:

import time 
import datetime 
import dateutil 
import json 

now = datetime.datetime.utcfromtimestamp(time.time()) 
tzlocal = dateutil.tz.tzlocal() 
info_str = json.dumps(dict(name=tzlocal.tzname(now), 
         offset=tzlocal.utcoffset(now).total_seconds())) 
print info_str 

die Drucke (auf meinem PC)

{"name": "US Mountain Standard Time", "offset": -25200.0} 
1

Ich bin nicht sicher, was Ihre Anwendung ist aber als Standard empfehle ich, ISO-8601-Zeitstempel mit einem Zeitzonen-Offset zu serialisieren. Noch besser, konvertieren Sie zuerst zu UTC ... das macht es den Menschen einfacher, die serialisierten Daten zu durchsuchen, weil sie nicht die Datumsmathematik in ihrem Kopf machen müssen.

Es mag Performance-Gründe geben, mit numerischen Zeitstempeln zu bleiben, aber ich möchte, dass dies ein Flaschenhals in meiner Anwendung war, bevor ich den menschlich lesbaren Bonus von ISO-Zeitstempeln aufgab.

Verwandte Themen