Menghitung Tanggal Field dengan tanggal hari ini dari datetime.date.today ()?


10

Saya sedang mengerjakan bagian dari alat yang akan menggunakan arcpy.CalculateField_management untuk menambahkan tanggal saat ini ke tabel atribut. Saya telah berjalan jauh dan lebar pada jalinan dan tampaknya tidak dapat menemukan resolusi untuk masalah ini.

Saat menggunakan kode ini, saya mendapatkan nilai "12:00:00"

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

Saat menggunakan kode ini, saya mendapatkan nilai "06/19/1905" dari tanggal hari ini "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")

Adakah pemikiran tentang apa yang saya lakukan salah? Saya ingin menghindari menggunakan kursor pembaruan, tetapi akan melakukannya jika itu opsi terakhir.


Tampaknya bagian Python dari kode ini berfungsi dengan benar antar tanggal. Tapi saya pikir masalahnya adalah bagian Arcpy dari kode. Coba "VB" alih-alih "PYTHON" dan lihat apakah itu memperbarui nilai yang benar di bidang.
F_Kellner

Ini tidak menyelesaikan masalah, tetapi memiliki hasil aneh mengubah nilai yang ditampilkan ke 12:00:54 AM.
analytics fathom

Jawaban:


10

Kursor pembaruan akan keluar menjalankan kalkulator bidang 100% dari waktu.

Anda perlu menulis ini sebagai ungkapan:

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 () tidak berfungsi di bidang kalkulator, beralih ke strftime.

ATAU, jika Anda ingin melakukannya dengan cara yang lebih baik di mana Anda dapat memberi makan variabel Anda sendiri, gunakan kursor:

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'

Saya menguji keduanya dan mereka bekerja dengan baik. Terima kasih! Di samping catatan, saya tidak ingin menggunakan kursor pembaruan karena ini membutuhkan penulisan lebih untuk sesuatu yang seharusnya relatif sederhana. Mungkin saya baru mengenal python dan tidak mengerti kegunaan fungsi. Di muka itu menggunakan alat gp dikemas lebih masuk akal bagi saya daripada menggunakan kursor. Pikiran?
analisis fathom

2
Itu bisa dimengerti. Saya juga takut pada kursor ketika saya pertama kali memulai dengan Python. Namun, ketika Anda merasa lebih nyaman dengan Python, saya pikir Anda akan menemukan kursor jauh lebih fleksibel. Juga, seperti yang saya sebutkan dalam jawaban asli saya, kursor memiliki kinerja yang jauh lebih baik. Di daerah saya dulu bekerja, seorang konsultan GIS telah menulis naskah untuk proses yang sangat lama yang menggunakan kalkulator lapangan berkali-kali dan ini membutuhkan waktu lebih dari 2 jam untuk dijalankan. Ketika saya menjadi lebih baik dengan Python, saya menulis ulang skrip dan menggunakan kursor bukannya calc bidang dan berlari di bawah 15 menit.
crmackey

0

Coba gunakan:

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

Tidak yakin di mana harus memodifikasi kode menggunakan bagian ini. Bisakah Anda mengedit posting Anda untuk menunjukkan seluruh kode?
analytics fathom

baris ini telah dimasukkan ke dalam jawaban di atas
detroit_hc
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.