2017-09-28 5 views
0

Ich weiß, es gab eine Menge Fragen zu diesem Problem, aber keine der Lösung, die ich implementieren kann, das ist super frustrierend so fragen.Python: Subtrahieren Zeit von Datetime

Ich habe eine Spalte für Datum und Uhrzeit wie:

time      timezone 
2015-03-10 18:20:27  Eastern Time 
2015-04-14 21:22:15  Pacific Time 
2015-04-10 18:03:10  Mountain Time 

Ich möchte 3 Stunden von den Mountain Time von den Pacific Time und 2 Stunden subtrahieren und Eastern Zeit zu halten, wie ist.

Meine Lösung:

df_slice["Time"] = df_slice["time"].map(lambda x: x.time().isoformat()) 

fmt = "%H:%M%:%S" 
def tz_adjust(row): 
    if row["timezone"] == "Pacific Time": 
     return row["Time"] - datetime.datetime.strptime("03:00:00",fmt) 
    elif row["timezone"] == "Mountain Time": 
     return row["Time"] - datetime.datetime.strptime("02:00:00",fmt) 
    else: 
     return row["Time"] 

df_slice["Tz_Time"] = df_slice.apply(tz_adjust,axis=1) 

ich die folgende Fehlermeldung erhalten:

ValueError: ("':' is a bad directive in format '%H:%M%:%S'", 'occurred at index 1261660')

Ich habe auch versucht time zu Zeit Umwandlung .time() und anschließend Stunden auf der Grundlage der Zeitzonen subtrahieren, ich

Operand "-" error for datetime.time() and datetime.time()

Was ist die einfache Lösung für die ta sk? Es scheint ziemlich einfach zu sein.

Antwort

2

müssen Sie timedelta verwenden, um Stunden von Datetime zu subtrahieren.

def tz_adjust(row): 
    if row["timezone"] == "Pacific Time": 
     return datetime.datetime.strptime(row["Time"], "%Y-%m-%d %H:%M:%S") - datetime.timedelta(hours=3) 
    elif row["timezone"] == "Mountain Time": 
     return datetime.datetime.strptime(row["Time"], "%Y-%m-%d %H:%M:%S") - datetime.timedelta(hours=2) 
    else: 
     return row["Time"] 
+0

Vielen Dank, @Dharmesh –