我正在使用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/
答案 0 :(得分:1)
您使用了错误的datetime方法。您收到的错误表明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)
的日期时间对象,返回的字符串将是'2003/06/03 00:00'