Seite 1 von 1

Zeit berechnung mit Milisekunden

Verfasst: Donnerstag 26. Juni 2014, 13:12
von audacity363
Guten Tag,

ich habe zwei Strings in denen ein Timestamp mit dem Format: "Jahr:Monat:Tag:Stunde:Minute:Sekunde:Milisekunde" drinnen steht.
Nun muss ich die Zeit Differenz zwischen diesen berechnen.
Habe mir mit :

Code: Alles auswählen

timestamp = "2014:06:25:23:58:45:01"
tmp = time.strptime(timestamp, "%Y:%m:%d:%H:%M:%S:%f")
schon einmal ein struct_time Objekt erstellt. Danach habe ich mit:

Code: Alles auswählen

timestamp = datetime.fromtimestamp(time.mktime(tmp))
einen Timestamp erzeugt, mit dem ich rechnen kann. An sich funktioniert das auch, nur werden bei dem "fromtimestamp()" die Millisekunden nicht übernommen.
Die beiden Zeiten liegen manchmal nur 5-6 Millisekunden auseinander und deswegen bekomme ich dann immer nur 0:00:00 zurück.

Jetzt zur eigentlichen Frage: Wie bekomme ich eine Zeitberechnung hin die, die Millisekunden mit einbezieht?

Re: Zeit berechnung mit Milisekunden

Verfasst: Donnerstag 26. Juni 2014, 13:22
von BlackJack
@audacity363: Also das erste ist ja offenbar kein gültiges Python, also sollte man mal klären was Du tatsächlich hast. Eine Zeichenkette? Da würde ich die `strptime()`-Methode von `datetime`-Objekten verwenden um die in ein solches Objekt zu wandeln.

Re: Zeit berechnung mit Milisekunden

Verfasst: Freitag 27. Juni 2014, 08:48
von audacity363
Beim ersten habe ich nur die "" vergessen... Ist schon verbessert. Okey an sich funktioniert es, nur werden auch dort die Millisekunden abgeschnitten, wenn sie .0000 sind. Brauche diese aber, da das ganze nachher von einem Excel Makro bearbeitet werden soll. Hab schon versucht das ganze in ein String umzuwandeln um das ganze abzufragen, aber das ist laut Google wohl nicht möglich.

Re: Zeit berechnung mit Milisekunden

Verfasst: Freitag 27. Juni 2014, 10:13
von mutetella
@audacity
Nullwerte bei Mikrosekunden werden nicht abgeschnitten, sondern lediglich nicht angezeigt, was eben nicht heißt, dass sie vom `datetime.datetime` Objekt nicht verwendet werden:

Code: Alles auswählen

>>> import datetime
>>> datetime.datetime(2014, 6, 27)
datetime.datetime(2014, 6, 27, 0, 0)
>>> _.microsecond
0
>>> t = "2014:06:25:23:58:45:01"
>>> t2 = "2014:06:25:23:58:45:00"
>>> datetime.datetime.strptime(t, '%Y:%m:%d:%H:%M:%S:%f') - datetime.datetime.strptime(t2, '%Y:%m:%d:%H:%M:%S:%f')
datetime.timedelta(0, 0, 10000)
>>> _.microseconds
10000
mutetella

Re: Zeit berechnung mit Milisekunden

Verfasst: Freitag 27. Juni 2014, 10:23
von audacity363
Ja okey bei 10000 funktioniert es auch aber bei 000000 schon nicht mehr. Es wird nur noch 0 angezeigt.
Habe es jetzt so gemacht, das ich 0 mit 000001 ersetze, das ganze in eine Datei schreibe, die einzelne Zeile einlesen und mit einem .replace() die 000001 wieder mit 000000 ersetze und die Datei dann wieder lösche.
Es funktioniert ist aber nicht schön...

Re: Zeit berechnung mit Milisekunden

Verfasst: Freitag 27. Juni 2014, 10:31
von EyDu
audacity363 hat geschrieben:Ja okey bei 10000 funktioniert es auch aber bei 000000 schon nicht mehr. Es wird nur noch 0 angezeigt.
Das ist auch korrekt. Du schreibst für eine 1 doch auch nicht 000001, sondern einfach 1.
audacity363 hat geschrieben:Habe es jetzt so gemacht, das ich 0 mit 000001 ersetze, das ganze in eine Datei schreibe, die einzelne Zeile einlesen und mit einem .replace() die 000001 wieder mit 000000 ersetze und die Datei dann wieder lösche.
Es funktioniert ist aber nicht schön...
Du machst was?! Erst handelst du dir Ungenauigkeiten ein, indem du 0 durch 000001 ersetzt, ggf. fälschlicherweise 000001 dann wieder durch 0. Warum formatierst du das ganze nicht gleich korrekt? Und warum schreibst du das ganze dann in eine Datei, ersetzt den Wert und löscht die Datei wieder? String-Formatierung, auch mit Datumsangaben, existiert. Du musst halt in die Dokumentation schauen.

Re: Zeit berechnung mit Milisekunden

Verfasst: Freitag 27. Juni 2014, 10:50
von audacity363
@EyDu Ich durchsuche die ganze Zeit die Doku um ein timedealta in ein String zu konvertieren. Finde aber immer nur etwas für ein datetime Objekt.
Fälschlicherweise kann es nicht geben, da den Timestamp den ich bekomme immer nur zehntel hat. Damit sind die 4 letzten Stellen immer frei.
Formatieren kann ich nicht richtig, da bei der Ausgabe nur 0 ausgeben wird. Das Excel Makro erwartet aber 6 nullen.

Re: Zeit berechnung mit Milisekunden

Verfasst: Freitag 27. Juni 2014, 11:03
von EyDu
Ich habe dir ja den Tipp zur String Formatierung genannt, die Dokumentation zu timedelta kennst du ja wahrscheinlich schon auswendig.

Vielleicht als kleine Hilfe:

Code: Alles auswählen

>>> "{:04d}".format(42)
'0042'

Re: Zeit berechnung mit Milisekunden

Verfasst: Freitag 27. Juni 2014, 11:04
von Sirius3

Code: Alles auswählen

>>> delta=datetime.timedelta(0,0.01)
>>> '%06d'%delta.microseconds
'010000'
>>> delta=datetime.timedelta(0,0)
>>> '%06d'%delta.microseconds
'000000'