我在datetime
中使用Arcpy
将要素类中的"Sample Date"
字段转换为一年中的某一天。该字段中的日期采用month/day/year
格式,并且不包含任何前导零(例如7/8/2018
而不是07/08/2018
)。
每当我尝试运行以下代码行时,
dtm = datetime.datetime.strptime(row, '%Y/%m/%d %H:%M')
我收到以下错误:
ValueError: time data '[datetime.datetime(2003, 6, 3, 0, 0)]' does not match format '%Y/%m/%d %H:%M'
我正在使用的样本日期字段不包括任何时间数据,我认为这些数据是错误消息末尾的两个零来自哪里。我只是假设它们是小时和分钟,但我不确定。
有谁知道零是什么,以便我可以更改我的代码以适应正确的格式或如何完全避免零?我尝试了datetime.date
而不是datetime.datetime
,但仍然有并发症。如果需要,我可以发布代码的长版本,但我提供的代码是错误消息的原因。我已经包含了我使用的datetime
参考的链接。该网站是为strftime
而不是strptime
,但我相信它的工作原理是一样的。尝试strftime
也会引发错误。链接:http://strftime.org/
您使用的是错误的日期时间方法。您得到的错误表明row
中的值已经是datetime object。
strptime
采用字符串和日期时间字符串格式并返回日期时间对象。
例如,此代码:datetime.datetime.strptime('2018/08/30 10:30', '%Y/%m/%d %H:%M')
返回对象datetime.datetime(2018, 8, 30, 10, 30)
strftime
返回一个字符串,表示指定格式的日期。
您已经在row
中有一个日期时间,因此您需要使用strftime
将其转换为字符串。
将row
转换为日期字符串的正确代码是:
dtm = row.strftime('%Y/%m/%d %H:%M')
这将返回表示日期时间的字符串。例如,对于datetime.datetime(2003, 6, 3, 0, 0)
的datetime对象,返回的字符串将为'2003/06/03 00:00'