我想通过从现有字段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'
答案 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", "")