Datumsfeld mit dem heutigen Datum aus datetime.date.today () berechnen?

10

Ich arbeite an einem Teil des Tools, das arcpy.CalculateField_management verwendet, um das aktuelle Datum zur Attributtabelle hinzuzufügen. Ich bin weit und breit durch die Interwebs gewandert und kann anscheinend keine Lösung für dieses Problem finden.

Bei Verwendung dieses Codes erhalte ich den Wert "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")

Bei Verwendung dieses Codes erhalte ich den Wert "19.06.1905" ab dem heutigen Datum "07.10.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")

Irgendwelche Gedanken darüber, was ich falsch mache? Ich möchte die Verwendung des Aktualisierungscursors vermeiden, werde dies jedoch tun, wenn dies die letzte Option ist.

Fathom Analytics
quelle
Es scheint, dass der Python-Teil dieses Codes zwischen den Daten korrekt funktioniert. Aber ich denke, das Problem liegt im Arcpy-Teil des Codes. Versuchen Sie "VB" anstelle von "PYTHON" und prüfen Sie, ob dadurch der richtige Wert im Feld aktualisiert wird.
F_Kellner
Dies löste das Problem nicht, hatte jedoch das seltsame Ergebnis, dass der angezeigte Wert auf 00:00:54 Uhr geändert wurde.
Fathom Analytics

Antworten:

10

Ein Update-Cursor führt den Feldrechner 100% der Zeit aus.

Sie müssen dies als Ausdruck schreiben:

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 () funktionierte nicht im Feldrechner und wurde auf strftime umgestellt.

ODER, wenn Sie es besser machen möchten, wo Sie Ihre eigenen Variablen eingeben können, verwenden Sie einen 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'
Crmackey
quelle
Ich habe beide getestet und sie funktionieren großartig. Vielen Dank! Nebenbei möchte ich den Update-Cursor nicht verwenden, da für etwas, das relativ einfach sein sollte, mehr geschrieben werden muss. Es kann sein, dass ich neu in Python bin und die Nützlichkeit der Funktion nicht verstehe. Auf den ersten Blick ist es für mich sinnvoller, ein gepacktes GP-Tool zu verwenden, als den Cursor zu verwenden. Gedanken?
Fathom Analytics
2
Das ist völlig verständlich. Auch ich hatte Angst vor den Cursorn, als ich zum ersten Mal mit Python anfing. Wenn Sie sich jedoch mit Python vertraut machen, werden Sie feststellen, dass die Cursor viel flexibler sind. Wie ich in meiner ursprünglichen Antwort erwähnt habe, haben die Cursor auch eine viel bessere Leistung. In der Grafschaft, für die ich früher gearbeitet habe, hatte ein GIS-Berater ein Skript für einen sehr langen Prozess geschrieben, bei dem der Feldrechner viele Male verwendet wurde. Die Ausführung dauerte über 2 Stunden. Als ich mit Python besser wurde, habe ich das Skript neu geschrieben und Cursor anstelle des Feldberechners verwendet, und es lief in weniger als 15 Minuten.
Crmackey
0

Versuchen Sie es mit:

time.strftime("%Y/%m/%d")
detroit_hc
quelle
Ich bin mir nicht sicher, wo ich den Code mithilfe dieses Teils ändern soll. Können Sie Ihren Beitrag bearbeiten, um den gesamten Code anzuzeigen?
Fathom Analytics
Diese Zeile wurde in die Antwort oben aufgenommen
detroit_hc