Zeit berechnung mit Milisekunden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

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?
Zuletzt geändert von audacity363 am Donnerstag 26. Juni 2014, 13:26, insgesamt 1-mal geändert.
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.
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

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.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

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...
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

@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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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'
Das Leben ist wie ein Tennisball.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Code: Alles auswählen

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