Obliczanie pola daty z dzisiejszą datą z datetime.date.today ()?

10

Pracuję nad częścią narzędzia, które użyje arcpy.CalculateField_management, aby dodać bieżącą datę do tabeli atrybutów. Wędrowałem daleko w różnych interwebach i nie mogę znaleźć rozwiązania tego problemu.

Podczas korzystania z tego kodu otrzymuję wartość „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")

Korzystając z tego kodu, otrzymuję wartość „19.06.1905” od dzisiejszej daty „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")

Masz jakieś przemyślenia na temat tego, co robię źle? Chciałbym uniknąć używania kursora aktualizacji, ale zrobi to, jeśli jest to ostatnia opcja.

zgłębiać analitykę
źródło
Wygląda na to, że część tego kodu w Pythonie działa poprawnie w interwałach daty. Ale myślę, że problem dotyczy części kodu Arcpy. Spróbuj „VB” zamiast „PYTHON” i sprawdź, czy to aktualizuje poprawną wartość w polu.
F_Kellner,
Nie rozwiązało to problemu, ale miało dziwny skutek zmiany wyświetlanej wartości na 12:00:54.
fathom analytics

Odpowiedzi:

10

Aktualizacja Kursor wykona kalkulator polowy przez 100% czasu.

Musisz napisać to jako wyrażenie:

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 () nie działał w kalkulatorze polowym, zmieniono na strftime.

LUB, jeśli chcesz to zrobić w lepszy sposób, w którym możesz wprowadzić własne zmienne, użyj kursora:

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
źródło
Przetestowałem oba te i działają świetnie. Dzięki! Na marginesie, nie chcę używać kursora aktualizacji, ponieważ wymaga więcej pisania dla czegoś, co powinno być stosunkowo proste. Możliwe, że jestem nowym użytkownikiem Pythona i nie rozumiem przydatności tej funkcji. Na pierwszy rzut oka użycie pakowanego narzędzia gp ma dla mnie większy sens niż używanie kursora. Myśli?
fathom analytics
2
To jest całkowicie zrozumiałe. Ja również obawiałem się kursorów, kiedy zaczynałem pracę z Pythonem. Jednak, gdy poczujesz się bardziej komfortowo z Pythonem, myślę, że zauważysz, że kursory są znacznie bardziej elastyczne. Ponadto, jak wspomniałem w mojej oryginalnej odpowiedzi, kursory mają znacznie lepszą wydajność. W hrabstwie, w którym kiedyś pracowałem, konsultant GIS napisał skrypt dla bardzo długiego procesu, który wielokrotnie korzystał z kalkulatora terenowego, a jego uruchomienie zajęło ponad 2 godziny. Kiedy poprawiłem się w Pythonie, przepisałem skrypt i użyłem kursorów zamiast kalkulatora polowego i działał on w ciągu 15 minut.
crmackey,
0

Spróbuj użyć:

time.strftime("%Y/%m/%d")
detroit_hc
źródło
Nie wiem, gdzie zmodyfikować kod za pomocą tej części. Czy możesz edytować swój post, aby wyświetlić cały kod?
fathom analytics
wiersz ten został włączony do powyższej odpowiedzi
detroit_hc