2016-10-11 2 views
1

Ich habe das folgende Bit Code, den ich verwende, um Zeitstempel von vielen Instrumenten zu erzeugen. Die Daten wird in eine anfängliche SQLite-Datenbank protokolliert, wenn es gelesen wird (w/o Millisekunden), dann in einer zweiten Datenbank protokolliert, wenn es übertragen ist (w. Millisekunden). Nach mehreren Tagen der Datenerfassung, finde ich, dass es einige Male pro Nacht gibt, wo ich mit einer geloggten Zeit enden werde, die mit 60 Sekunden endet (gegen 00 oder 59).Python 2.7 datetime Objekt, das einen Wert von 60 Sekunden zurückgibt

Ich verstehe, dass Python eine gewisse Unterstützung für Schaltsekunden hat, aber ich weiß, dass es nicht während der Nächte waren ich Daten aufzeichnete. Außerdem unterstützt datetime keine Sekunden, die größer als 59 sind. Wie auch immer, ich weiß nicht, was passiert, und ich konnte das Problem nicht von Hand reproduzieren. Ich hatte gehofft, jemand anderes hätte dieses Verhalten schon einmal gesehen.

So, als Beispiel, in meinem ersten Protokoll habe ich den Eintrag 20160823043460, und in meinem Sendeprotokoll Ich habe 20160823043500,01.

Hier ist mein Code-Zeitstempel. (Ja, ich weiß, es ist seltsam, dass alles, was nicht den gleichen Zeitstempel erhält, aber ich habe die Spezifikation nicht Design, ich bin Codierung, um es gerade)

def makeTimeStamp(time=None, miliseconds=False): 
    timeStamp = "" 
    if time is None and miliseconds is False: 
     timeStamp = datetime.datetime.utcnow().strftime("%Y%m%d%H%M%S") 
    #time format: YYYY MM DD HH MM SS as one string 
    elif time is None and miliseconds is True: 
     timeStamp = datetime.datetime.utcnow().strftime("%Y%m%d%H%M%S.%f") 
    else: 
     try: 
      timeStamp = time.strftime("%Y%m%d%H%M%S") 
     except AttributeError: 
      print "error: attempted to make a timestamp from a " + type(time) 
    return timeStamp 
+0

Vielen Dank, das ist leichter zu lesen. –

+0

Rufen Sie Ihre Funktion mit time = None auf und speichern Sie die zurückgegebene Zeichenfolge als Zeichenfolge und nicht als Zahl? Sie sagen, Sie speichern es in SQLite. Was ist der Datentyp der Spalte? Denken Sie auch daran, das Argument 'time' umzubenennen, da es in der Standardbibliothek ein Modul mit diesem Namen gibt, das zufälligerweise auch eine 'strftime()' Funktion hat. – Anton

+0

Ah, ok. Das ist also eine schlechte Wahl meines Namens. Ich weiß nicht, warum ich das ausgewählt habe, aber es ist ein Ort, an dem man in einer anderen Zeit vorbeikommt. In diesem Fall benutze ich es überhaupt nicht, Zeit ist immer keine. –

Antwort

-1

prüfen Python-Dokumentation für Zeitbibliothek, here.

In den Anmerkungen, unter 2 heißt es, dass der Bereich für Sekunden ist wirklich [0, 61].

+0

Können Sie downvote erklären? – Fejs

+0

Verstanden. Die Dokumente sagen jedoch, dass die 60 und 61 für Schaltsekunden sind, die nicht während der Protokollierung aufgetreten sind. Ich habe das Gefühl, dass dies ein Rundungsfehler ist, aber ich bin überrascht, dass es in einer Python-Basisbibliothek ist. –

+0

OP sagt, dass er nicht das Zeitpaket, sondern Datetime, das nicht Schaltsekunden gemäß den Dokumenten tut. – Anton

Verwandte Themen