Tính trường ngày với ngày hôm nay từ datetime.date.today ()?


10

Tôi đang làm việc trên một phần của công cụ sẽ sử dụng arcpy.CalculateField_man quản lý để thêm ngày hiện tại vào bảng thuộc tính. Tôi đã đi lang thang khắp nơi trên các mạng và dường như không thể tìm ra giải pháp cho vấn đề này.

Khi sử dụng mã này, tôi nhận được giá trị "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")

Khi sử dụng mã này, tôi nhận được giá trị "06/19/1905" từ ngày hôm nay là "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")

Bạn có suy nghĩ gì về những gì tôi đang làm sai? Tôi muốn tránh sử dụng con trỏ cập nhật, nhưng sẽ làm như vậy nếu đó là tùy chọn cuối cùng.


Dường như phần Python của mã này đang hoạt động chính xác giữa các ngày. Nhưng tôi nghĩ vấn đề là ở phần Arcpy của mã. Hãy thử "VB" thay vì "PYTHON" và xem liệu điều đó có cập nhật giá trị chính xác trong trường không.
F_Kellner

Điều này không giải quyết được vấn đề, nhưng đã có kết quả kỳ lạ là thay đổi giá trị được hiển thị thành 12:00:54 AM.
phân tích fathom

Câu trả lời:


10

Một con trỏ cập nhật sẽ thực hiện máy tính trường 100% thời gian.

Bạn cần viết điều này như một biểu thức:

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 () không hoạt động trong máy tính trường, chuyển sang strftime

HOẶC, nếu bạn muốn làm điều đó theo cách tốt hơn nơi bạn có thể cung cấp các biến của riêng mình, hãy sử dụng một con trỏ:

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'

Tôi đã thử nghiệm cả hai thứ này và chúng hoạt động rất tốt. Cảm ơn! Bên cạnh đó, tôi không muốn sử dụng con trỏ cập nhật vì nó yêu cầu viết nhiều hơn cho một thứ tương đối đơn giản. Có thể tôi chưa quen với python và không hiểu tính hữu dụng của chức năng. Trên mặt của nó bằng cách sử dụng một công cụ gp đóng gói có ý nghĩa với tôi hơn là sử dụng con trỏ. Suy nghĩ?
phân tích fathom

2
Điều đó là hoàn toàn dễ hiểu. Tôi cũng sợ những con trỏ khi lần đầu tiên bắt đầu với Python. Tuy nhiên, khi bạn cảm thấy thoải mái hơn với Python, tôi nghĩ bạn sẽ thấy các con trỏ linh hoạt hơn nhiều. Ngoài ra, như tôi đã đề cập trong câu trả lời ban đầu của mình, các con trỏ có hiệu suất tốt hơn nhiều. Tại quận tôi từng làm việc, một chuyên gia tư vấn về GIS đã viết một kịch bản cho một quá trình rất dài sử dụng máy tính trường nhiều lần và việc này mất hơn 2 giờ để chạy. Khi tôi trở nên tốt hơn với Python, tôi đã viết lại tập lệnh và sử dụng các con trỏ thay vì trường calc và nó chạy trong dưới 15 phút.
crmackey

0

Hãy thử sử dụng:

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

Không chắc chắn nơi để sửa đổi mã bằng phần này. Bạn có thể chỉnh sửa bài viết của bạn để hiển thị toàn bộ mã?
phân tích fathom

dòng này đã được đưa vào câu trả lời ở trên
detroit_hc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.