将日期时间数据转换为正确的格式arcpy python arcmap

时间:2018-08-29 20:54:15

标签: python datetime strptime arcpy arcmap

我正在使用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/

1 个答案:

答案 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'