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

Python 从CSV文件中的字符串表示形式创建日期时间,python,csv,datetime,strptime,Python,Csv,Datetime,Strptime,我有一个CSV文件,其中记录了特定格式的日期时间: %Y-%m-%d%H:%m:%s%Z 例如: 2017-02-1114:11:42太平洋标准时间 我正在尝试将datetime格式化为更友好的值,以便以后使用 但是,到目前为止,我无法使用代码创建对象 这是我的密码: for r in row: purchase_date.append( datetime.strptime(row['purchase-date'], "%Y/%m/%d %H:%M:%S %Z") )

我有一个
CSV
文件,其中记录了特定格式的日期时间:

%Y-%m-%d%H:%m:%s%Z
例如:

2017-02-1114:11:42太平洋标准时间
我正在尝试将
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'

当试图从字符串转换时,时区通常相当不稳定。通常最好自己处理时区字符串。下面是一段代码,它将时区与时间戳分开,然后分别进行转换

代码:

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'))
测试代码:

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

当试图从字符串转换时,时区通常相当不稳定。通常最好自己处理时区字符串。下面是一段代码,它将时区与时间戳分开,然后分别进行转换

代码:

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'))
测试代码:

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

您应该能够更改格式以匹配日期字符串。在错误中,日期字符串使用破折号而不是斜杠,因此请使格式字符串匹配:

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

您应该能够更改格式以匹配日期字符串。在错误中,日期字符串使用破折号而不是斜杠,因此请使格式字符串匹配:

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

不,不是。日期组件之间有破折号,而不是斜线。@jornsharpe Ok。如何进一步格式化?什么?您需要更改格式,使其与您尝试解析的日期时间相匹配。日期组件之间有破折号,而不是斜线。@jornsharpe Ok。如何进一步格式化?什么?您需要更改格式,使其与您尝试解析的日期时间相匹配。