Datetime.date.today () öğesinden bugünün tarihini içeren Tarih Alanı hesaplanıyor mu?


10

Geçerli tarih için öznitelik tablosuna eklemek için arcpy.CalculateField_management kullanacak aracın bir parçası üzerinde çalışıyorum. İnterweb'lerde çok fazla dolaştım ve bu sorunun çözümünü bulamıyorum.

Bu kodu kullanırken, "12:00:00 AM" değerini alıyorum

    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")

Bu kodu kullanırken, bugünün "10/07/2014" tarihinden itibaren "06/19/1905" değerini alıyorum

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

Neyi yanlış yaptığım hakkında bir fikrin var mı? Güncelleme imlecini kullanmaktan kaçınmak istiyorum, ancak son seçenekse bunu yapacaktır.


Bu kodun Python kısmı tarih aralıkları doğru çalışıyor gibi görünüyor. Ama sorun kodun Arcpy bölümünde olduğunu düşünüyorum. "PYTHON" yerine "VB" yi deneyin ve alandaki doğru değeri güncelleyip güncellemediğine bakın.
F_Kellner

Bu sorunu çözmedi, ancak görüntülenen değeri 12:00:54 olarak değiştirmenin garip bir sonucu oldu.
fathom analytics

Yanıtlar:


10

Bir güncelleme imleci saha hesap makinesini% 100 oranında gerçekleştirir.

Bunu bir ifade olarak yazmanız gerekir:

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 () alan hesap makinesinde çalışmadı, strftime olarak değiştirildi.

VEYA, bunu kendi değişkenlerinizi besleyebileceğiniz daha iyi bir şekilde yapmak istiyorsanız, bir imleç kullanın:

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'

Her ikisini de test ettim ve harika çalışıyorlar. Teşekkürler! Bir yan notta, nispeten basit olması gereken bir şey için daha fazla yazmayı gerektirdiğinden güncelleme imlecini kullanmak istemiyorum. Python için yeniyim ve fonksiyonun kullanışlılığını anlamıyor olabilirim. Yüzünde paketlenmiş bir gp aracı kullanmak imleci kullanmaktan daha mantıklı. Düşünceler?
fathom analytics

2
Bu tamamen anlaşılabilir. Python'a ilk başladığımda imleçlerden de korktum. Ancak, Python ile daha rahat edindikçe, imleçlerin çok daha esnek olduğunu göreceksiniz. Ayrıca, orijinal cevabımda belirttiğim gibi, imleçler çok daha iyi bir performansa sahipler. Eskiden çalıştığım ilçede, bir CBS danışmanı, saha hesap makinesini birçok kez kullanan çok uzun bir süreç için bir senaryo yazmıştı ve bu işlemin çalışması 2 saatten fazla sürdü. Python ile daha iyi hale geldiğimde, senaryoyu yeniden yazdım ve alan calc yerine imleçler kullandım ve 15 dakikanın altında koştu.
crmackey

0

Kullanmayı deneyin:

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

Bu bölümü kullanarak kodu nerede değiştireceğinizden emin değilim. Yayınınızın tamamını göstermek için yayınınızı düzenleyebilir misiniz?
fathom analytics

Bu hat yukarıdaki cevaba eklendi
detroit_hc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.