Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将arcgis日期字段转换为一年中的某一天_Python_Datetime_Arcgis_Dayofmonth - Fatal编程技术网

Python 将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的代码,这似乎是我需要走的路,但我见过的大多数代码都要求用户输入他们要查找的特定日期,但由于我有这么多

我目前在ArcGIS中有多个要素类,所有要素类都包含一个名为
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字段中。基本上,我如何获取每个要素类中样本日期字段中的日期,以成为上面代码中的“日期字符串”