Python:从datetime减去时间

时间:2017-09-28 16:44:59

标签: python datetime

我知道有很多关于这个问题的问题,但是没有一个我能够实施的解决方案,这是非常令人沮丧的问题。

我有一列日期时间,例如:

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

我想从Pacific Time减去3小时,从Mountain Time减去2小时,并按原样保留东部时间。

我的解决方案:

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)

我收到以下错误:

  

ValueError :("':'格式错误指令'%H:%M%:%S'",'发生了   在索引1261660')

我还尝试使用time.time()转换为时间,然后根据时区减去小时数,我得

  

操作数" - " datetime.time()和datetime.time()

的错误

该任务的简单解决方案是什么?这似乎相当容易。

1 个答案:

答案 0 :(得分:2)

您需要使用timedelta从日期时间中减去小时数。

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"]