将Arcgis日期字段转换为一年中的日期

时间:2018-08-08 19:37:49

标签: python datetime arcgis dayofmonth

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

我需要python或arcpy中的代码,以将字段中的采样日期转换为对应的一年中的某一天(请注意year年)(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):  

2 个答案:

答案 0 :(得分:1)

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

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

获取一年中某天的示例:

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

答案 1 :(得分:0)

您可以使用datetime module。假设您的日期为月/日/年:

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)