2017-04-04 60 views
1

我有一個CSV文件,記錄日期時間與特定的格式:從一個CSV字符串表示創建一個日期文件

%Y-%m-%d %H:%M:%s %Z 

例子:

2017-02-11 14:11:42 PST 

我試圖格式化datetime以更友好的價值在以後使用。

但是,到目前爲止,我一直無法用我的代碼創建一個datetime對象。

這裏是我的代碼:

for r in row: 
    purchase_date.append(
    datetime.strptime(row['purchase-date'], "%Y/%m/%d %H:%M:%S %Z") 
    ) 

這是收到的錯誤:試圖從字符串轉換時

ValueError: time data '2017-02-11 14:11:42 PST' does not match format %Y/%m/%d %H:%M:%S %Z' 
+2

嗯不,它不。它在日期組件之間有破折號,而不是斜槓。 – jonrsharpe

+0

@jonrsharpe好的。我如何進一步格式化? – EwokHugz

+1

什麼?您需要*更改格式*,以便它實際上與您嘗試解析的日期時間相匹配。 – jonrsharpe

回答

0

時區往往是靠不住的相當。通常最好自己處理時區字符串。這裏有一些代碼將時區和時區分開,然後分別進行轉換。

代碼:

import datetime as dt 
import pytz 

my_timezones = dict(
    PST='US/Pacific', 
) 

def convert_my_datetime_str(dt_str): 
    # split into time and timezone 
    timestamp, tz_str = dt_str.rsplit(' ', 1) 

    # convert the date string to datetime 
    time = dt.datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S") 

    # get a timezone name 
    tz = pytz.timezone(my_timezones[tz_str]) 

    # return a timezone aware datetime 
    return tz.localize(time) 

測試代碼:

print(convert_my_datetime_str('2017-02-11 14:11:42 PST')) 

結果;

2017-02-11 14:11:42-08:00 
0

你應該能夠改變格式來匹配你的日期字符串。在錯誤中,您的日期字符串具有破折號而不是斜線,因此請使格式字符串匹配:

for r in row: 
    purchase_date.append(
    datetime.strptime(row['purchase-date'], "%Y-%m-%d %H:%M:%S %Z") 
    ) 
相關問題