Cálculo del campo de fecha con la fecha de hoy de datetime.date.today ()?


10

Estoy trabajando en una parte de la herramienta que usará arcpy.CalculateField_management para agregar la fecha actual a la tabla de atributos. He vagado por todas partes en las redes y parece que no puedo encontrar la solución a este problema.

Cuando uso este código, obtengo el valor "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")

Cuando uso este código, obtengo el valor "19/06/1905" a partir de la fecha de hoy del "10/07/2014"

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

¿Alguna idea sobre lo que estoy haciendo mal? Me gustaría evitar usar el cursor de actualización, pero lo haré si es la última opción.


Parece que la parte de Python de este código funciona correctamente en términos de la fecha. Pero creo que el problema es con la porción Arcpy del código. Pruebe "VB" en lugar de "PYTHON" y vea si eso actualiza el valor correcto en el campo.
F_Kellner

Esto no resolvió el problema, pero tuvo el extraño resultado de cambiar el valor mostrado a las 12:00:54 AM.
análisis de fathom

Respuestas:


10

Un cursor de actualización realizará la calculadora de campo el 100% del tiempo.

Necesita escribir esto como una expresión:

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 () no funcionó en la calculadora de campo, cambió a strftime.

O, si desea hacerlo de la mejor manera donde puede alimentar sus propias variables, use un cursor:

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'

Probé ambos y funcionan muy bien. ¡Gracias! En una nota al margen, no quiero usar el cursor de actualización porque requiere escribir más para algo que debería ser relativamente simple. Puede ser que soy nuevo en Python y no entiendo la utilidad de la función. A primera vista, usar una herramienta gp empaquetada tiene más sentido para mí que usar el cursor. Pensamientos?
análisis de fathom

2
Eso es completamente comprensible. Yo también temía a los cursores cuando comencé a usar Python. Sin embargo, a medida que te sientas más cómodo con Python, creo que encontrarás que los cursores son mucho más flexibles. Además, como mencioné en mi respuesta original, los cursores tienen un rendimiento mucho mejor. En el condado donde solía trabajar, un consultor de SIG había escrito un guión para un proceso muy largo que utilizaba la calculadora de campo muchas veces y esto tardó más de 2 horas en ejecutarse. Cuando mejoré con Python, reescribí el script y usé cursores en lugar del campo calc y funcionó en menos de 15 minutos.
crmackey

0

Intenta usar:

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

No estoy seguro de dónde modificar el código con esta parte. ¿Puedes editar tu publicación para mostrar el código completo?
análisis de fathom

esta línea se ha incorporado a la respuesta anterior
detroit_hc
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.