Python 将arcgis日期字段转换为一年中的某一天
我目前在ArcGIS中有多个要素类,所有要素类都包含一个名为Python 将arcgis日期字段转换为一年中的某一天,python,datetime,arcgis,dayofmonth,Python,Datetime,Arcgis,Dayofmonth,我目前在ArcGIS中有多个要素类,所有要素类都包含一个名为Date、Sample\u Date或T0\u Date的字段,该字段包含每个采样的日期。日期不包含前导零(例如2014年7月4日非2014年7月4日) 我需要一个python或arcpy代码,用于将字段中的示例日期转换为一年中相应的日期(闰年)(1月1日为1日,12月31日为365日)。 我见过许多使用datetime和StrTime的代码,这似乎是我需要走的路,但我见过的大多数代码都要求用户输入他们要查找的特定日期,但由于我有这么多
Date
、Sample\u Date
或T0\u Date
的字段,该字段包含每个采样的日期。日期不包含前导零(例如2014年7月4日<代码>非<代码>2014年7月4日<代码>)
我需要一个python或arcpy代码,用于将字段中的示例日期转换为一年中相应的日期(闰年)(1月1日为1日,12月31日为365日)。我见过许多使用datetime和StrTime的代码,这似乎是我需要走的路,但我见过的大多数代码都要求用户输入他们要查找的特定日期,但由于我有这么多数据文件,所以我正在寻找一种可以为我实现自动化的代码。请让我知道任何代码,你知道,这将有助于我做到这一点
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):
你可以用这个。假设您的日期是月/日/年:
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)
这是使用
datetime
包完成的一件非常简单的事情。它有一个名为strtime
的函数,该函数接收字符串并将其转换为日期时间。然后还有另一个名为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
您的日期是月/日/年还是日/月/年?月/日/年在日或月中没有前导零。我有一个类似的代码,但我的主要困难是如何从每个要素类的字段中调用日期(“日期”、“采样日期”或“T0日期”,取决于字段收集器决定如何命名字段)并将该日期转换为一年中的某一天。我也忘了提到这一点,但我试图将从代码中收到的日期添加到我创建的名为“DOY”的空字段中。基本上,如果每个要素类中有30个样本,我想获得每个样本的样本日期,并将一年中的日期输出到DOY字段中。基本上,我如何获得每个要素类中样本日期字段中的日期,以成为“test_str”在上面的代码中,如果没有看到您的代码或数据,就很难提供真正的帮助。但是从高层次的角度来看,你可能只需要遍历所有功能,尝试使用任何可能的字段名从每个功能中提取日期字段,然后使用上述代码将其转换为一年中的某一天。我同意@Karl,如果您在问题中添加了一些代码,也许我们可以帮助您,但如果没有这些代码,就不可能。据我所知,虽然我会有一些if语句来检查这三个字段中哪一个字段在循环时有日期。忽略上面的代码我在上传代码时遇到了问题,但基本上我所处的位置是尝试从名为“date”的字段调用日期字符串这样我就可以使用你们提供的代码,从这个字符串中得到一年中的哪一天。如果您知道一个代码,它实际上可以从“日期”字段中获取日期,这样我就可以使用y’all代码来获取一年中的某一天,这正是我要寻找的,应该可以解决我的问题。我有一个类似的代码,但我的主要任务是如何从每个要素类的字段中调用日期(“日期”、“样本日期”或“T0日期”)根据字段收集器决定的字段名称),并将该日期转换为一年中的某一天。我也忘了提到这一点,但我试图将从代码中收到的日期添加到我创建的名为“DOY”的空字段中。基本上,如果每个要素类中有30个样本,我想获取每个样本的样本日期,并将一年中的日期输出到DOY字段中。基本上,我如何获取每个要素类中样本日期字段中的日期,以成为上面代码中的“日期字符串”