-2

我目前在 ArcGIS 中有多个要素类,它们都包含一个名为Date,Sample_DateT0_Date具有每个样本采集日期的字段。日期不包含前导零(例如7/4/2014not 07/04/2014)。

我需要 python 或 arcpy 中的代码,它将字段中的示例日期转换为其对应的一年中的日期(闰年)(1 月 1 日为 1,12 月 31 日为 365)。
我见过许多使用 datetime 和 strptime 的代码,这似乎是我需要走的路,但我见过的大多数代码都要求用户输入他们正在寻找的特定日期,但由于我有这么多数据文件,我是寻找可以为我自动化的代码。请让我知道您知道的任何可以帮助我做到这一点的代码。

import arcpy  
import datetime  
from datetime import datetime  
fcList = arcpy.ListFeatureClasses()  
for fc in fcList:  
    if "DOY" not in arcpy.ListFields(fc):  
        arcpy.AddField_management(fc,"DOY","SHORT")  
    if "DOY" in arcpy.ListFields(fc):      
        if "Date" in arcpy.ListFields(fc):  
4

2 回答 2

1

使用这个datetime包是一件非常简单的事情。它有一个名为的函数strptime,它接收一个字符串并将其转换为日期时间。然后是另一个调用的函数strftime,它将以特定格式输出日期时间(在您的情况下为一年中的某一天)。

您可以在此处查看文档以获取有关日期时间的更多信息。

获取年份的示例:

def get_DOY(date_string):
    # First convert string to datetime object
    parsed_datetime = datetime.datetime.strptime(test_str, '%m/%d/%Y') 

    # Then get day of year from datetime
    day_of_year = parsed_datetime.timetuple().tm_yday
    return day_of_year

编辑:更简单的方法是从时间元组中获取一年中的某一天,以便将其直接输出为 int

我对arcgis没有经验,但假设功能是.getValue根据字段名称获取值:

import arcpy 
import datetime  # You should only import datetime once

fcList = arcpy.ListFeatureClasses()  
for fc in fcList:  
    field_list = arcpy.ListFields(fc)
    if "DOY" not in field_list:  
        arcpy.AddField_management(fc,"DOY","SHORT")  

    date_string = None

    # Assuming .getValue is how you get a value from the fc
    if "Date" in field_list:
        date_string = fc.getValue("Date")
    elif "Sample_Date" in field_list:
        date_string = fc.getValue("Sample_Date")
    elif "T0_Date" in field_list:
        date_string = fc.getValue("T0_Date")

    if date_string is not None:
        day_of_year = get_DOY(date_string) # call function as listed above
    else:
        # handle when no date value found here
于 2018-08-08T19:53:55.873 回答
0

您可以使用datetime 模块。假设您的日期是月/日/年:

from datetime import datetime

date_string = "7/4/2014"

parts = date_string.split("/")

month = int(parts[0])
day = int(parts[1])
year = int(parts[2])

print(datetime(year, month, day).timetuple().tm_yday)
于 2018-08-08T19:53:46.030 回答