从CSV文件中的字符串表示创建日期时间

时间:2017-04-04 21:24:03

标签: python csv datetime strptime

我有一个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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您应该只需更改格式即可匹配日期字符串。在错误中,您的日期字符串有破折号而不是斜杠,因此请使格式字符串匹配:

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