我目前在ArcGIS中具有多个要素类,所有要素类都包含一个名为Date
,Sample_Date
或T0_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):
答案 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)