2016-11-08 1 views
-2

Gegeben eine Zeichenfolge, die wie "Hours:5 Minutes:34 Seconds:28" oder "Minutes:34 Seconds:28" aussieht, gibt es einen Pythonic Weg, um es in ein datetime Objekt zu konvertieren? Ich möchte keine Regex verwenden, wenn es einen einfacheren Weg gibt.Delta-Zeit Zeichenfolge zu Datetime-Objekt

+0

Warum haben Sie zweimal "Minuten" und "Sekunden"? – Fejs

+0

Nein, "Stunden: 5 Minuten: 34 Sekunden: 28", "Minuten: 34 Sekunden: 28", "Sekunden: 28". Dies ist ein Beispiel für eine Eingabezeichenkette mit Datum, String besteht immer aus Secounds und wenn neede besteht aus Minutes, Houers, Days ... –

Antwort

2

Ja, gibt es. Sie können es wie folgt tun:

import time 

datetime_string = "Hours:5 Minutes:34 Seconds:28" 
if "Hours" in datetime_string: 
    datetime_object = time.strptime(datetime_string, "Hours:%H Minutes:%M Seconds:%S") 
elif "Minutes" in datetime_string: 
    datetime_object = time.strptime(datetime_string, "Minutes:%M Seconds:%S") 
else: 
    datetime_object = time.strptime(datetime_string, "Seconds:%S") 

Hinweis: Wenn Sie Datetime-Objekt zu erstellen, Werte, die Sie liefern nicht mit Standard values.So gefüllt werden, falls datetime_string nur Sekunden, Stunden und Minuten enthält, wird auf 0 eingestellt werden.

2

Sie datetime.strptime() verwenden können Zeichenfolge in datetime Objekt als konvertieren:

>>> from datetime import datetime 
>>> date_object = datetime.strptime('Hours:5 Minutes:34 Seconds:28', 'Hours:%H Minutes:%M Seconds:%S') 
>>> date_object 
datetime.datetime(1900, 1, 1, 5, 34, 28) 
#       ^^^
#       Hour Min Seconds 

Da Sie in der Zeichenfolge nicht über Datum, wird es das Standarddatum 1 Jan 1990 halten. Ich denke, was Sie brauchen, ist datetime.time(), die time Objekt mit der gleichen Stunde, Minute, Sekunde und Mikrosekunde wie in Ihnen datetime Objekt zurückgeben. (tzinfo ist None). Zum Beispiel:

>>> date_object.time() 
datetime.time(5, 34, 28) 
#   ^^^
#   Hour Min Seconds 

wo date_object von datetime Typ zuvor erstellt ist.