使用datetime.date.today()中的今天的日期计算Date字段?


10

我正在使用arcpy.CalculateField_management将当前日期添加到属性表的工具的一部分。我在互联网上徘徊了很多,似乎找不到解决此问题的方法。

使用此代码时,我得到的值是“ 12:00:00 AM”

    input = r'C:\GIS\CARGIS\SHAPES.gdb\CRASH_ON_2013'
    today = datetime.date.today()
    dte = today.strftime('%m/%d/%Y')
    arcpy.CalculateField_management(input,"DTCARXTRCT",dte,"PYTHON")

使用此代码时,我从今天的“ 10/07/2014”获取值“ 06/19/1905”

    input = r'C:\GIS\CARGIS\SHAPES.gdb\CRASH_ON_2013'
    today = datetime.date.today()
    dte = str(today)
    arcpy.CalculateField_management(input,"DTCARXTRCT",dte,"PYTHON")

对我在做什么错有任何想法吗?我想避免使用更新游标,但是如果这是最后一个选择,那么会这样做。


看来该代码的Python部分在日期范围内正常工作。但是我认为问题出在代码的Arcpy部分。尝试使用“ VB”而不是“ PYTHON”,并查看该字段是否更新了正确的值。
F_Kellner 2014年

这不能解决问题,但是确实有将显示的值更改为12:00:54 AM的奇怪结果。
fathom Analytics

Answers:


10

更新Cursor将在100%的时间内超出字段计算器的性能。

您需要将其写为表达式:

import arcpy, datetime

fc = r'C:\GIS\CARGIS\SHAPES.gdb\CRASH_ON_2013'
field = "DTCARXTRCT"
exp = '''def add_date():
  import time
  return time.strftime("%Y/%m/%d")'''

arcpy.CalculateField_management(fc, field, 'add_date()',
                                'PYTHON', exp)
print 'done'

datetime.date.today()在字段计算器中不起作用,已切换为strftime。

或者,如果您想通过更好的方式来输入自己的变量,请使用游标:

import arcpy, datetime

fc = r'C:\GIS\CARGIS\SHAPES.gdb\CRASH_ON_2013'
field = "DTCARXTRCT"
with arcpy.da.UpdateCursor(fc, [field]) as rows:
    for row in rows:
        rows.updateRow([datetime.date.today()])
print 'done'

我测试了这两个,它们都很好用。谢谢!附带一提,我不想使用更新游标,因为它需要为应该相对简单的内容编写更多内容。可能是我是python的新手,并且不了解该功能的用处。从表面上看,使用打包的gp工具比使用游标更有意义。有什么想法吗?
fathom Analytics 2014年

2
这是完全可以理解的。刚开始使用Python时,我也很担心游标。但是,随着您对Python的使用越来越熟悉,我认为您会发现游标更加灵活。而且,正如我在原始答案中提到的那样,游标具有更好的性能。在我以前工作的县里,一位GIS顾问为一个很长的过程编写了一个脚本,该脚本多次使用该字段计算器,而且运行时间超过2个小时。当我对Python有了更好的了解时,我重写了脚本并使用了游标而不是字段calc,它在15分钟内运行了。
crmackey 2014年

0

尝试使用:

time.strftime("%Y/%m/%d")

不确定使用该部分在哪里修改代码。您可以编辑帖子以显示整个代码吗?
fathom Analytics 2014年

这条线已经被掺入到上述答案
detroit_hc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.