2017-09-28 13 views
0

私はこの問題に関する多くの質問があることを知っていますが、実装することができる解決策のどれもが非常に欲求不満です。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 

は私がMountain TimeからPacific Timeと2時間から3時間を減算しているよう東部時間を維持したい:

は私のような日時の列を持っています。

私のソリューション:

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: ("':' is a bad directive in format '%H:%M%:%S'", 'occurred at index 1261660')

私も、私は

を取得し、 .time()を使用して時間に timeを変換して、タイムゾーンに基づいて時間を引いてみました

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

taの簡単な解決方法スカ?それはかなり簡単だと思われる。

答えて

2

timedeltaを使用してdatetimeから時間を差し引く必要があります。

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

ありがとう、@Dharmesh –

関連する問題