计算字段以从日期时间Python中删除时间

时间:2015-02-12 18:41:38

标签: python arcpy

我想通过从现有字段DATE_VAL中抓取日期(去掉时间)来计算新字段的值。

但是我一直都会遇到错误。这是我的代码。

formatter_string = "%m%d%y"
arcpy.CalculateField_management("joined", "Date", dt.strftime("!DATE_VAL!", formatter_string), "PYTHON_9.3", "")

如果我尝试以下方法:

arcpy.CalculateField_management("joined", "Date", "dt.strftime(!DATE_VAL!, formatter_string).date()", "PYTHON_9.3", "")

我收到以下错误: ExecuteError:错误000539:运行表达式时出错:dt.strftime(u“5/1/2014 3:00:00 AM”,formatter_string).date()

当我尝试以下操作时:

formatter_string = "%m/%d/%Y %I:%M:%S %p"

arcpy.CalculateField_management("joined", "Date",
     dt.strptime("!DATE_VAL!", formatter_string).date(), "PYTHON_9.3", "")

我收到错误:ValueError:时间数据'!DATE_VAL!'格式'%m /%d /%Y%I:%M:%S%p'

3 个答案:

答案 0 :(得分:0)

datetime.datetime个对象使用date方法返回datetime.date个对象。

formatter_string = "%m/%d/%Y %I:%M:%S %p"

arcpy.CalculateField_management("joined", "Date",
         "dt.strptime(!DATE_VAL!, formatter_string).date()", "PYTHON_9.3", "")

答案 1 :(得分:0)

我发现一些代码使用更新游标而不是计算字段。这似乎符合我的目的。我可能应该在gis堆栈交换中发布这个。遗憾。

arcpy.AddField_management("joined", "Date", "DATE")
rows = arcpy.UpdateCursor("joined")
for row in rows:
    datetimeVal = row.getValue("DATE_VAL")
    formattedTime = dt.strftime(datetimeVal, "%m/%d/%Y")
    row.setValue("Date", formattedTime)
    rows.updateRow(row)
del rows, row

答案 2 :(得分:0)

我不是烦人的人,但这应该做:

而不是:

arcpy.CalculateField_management("joined", "Date", "dt.strftime(!DATE_VAL!, formatter_string).date()", "PYTHON_9.3", "")

这样做:

date_format = '%m/%d/%Y'
formatter_string = '%m/%d/%Y %I:%M:%S %p'
arcpy.CalculateField_management("joined", "Date", "dt.strftime(!DATE_VAL!, formatter_string).date().strftime(date_format)", "PYTHON_9.3", "")