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。如何进一步格式化?什么?您需要更改格式,使其与您尝试解析的日期时间相匹配。