当有两个日期时,如何在Python中从文件名中提取日期?我该如何转换为一年中的哪一天



我有一个文件列表,其中包含两个日期。如何提取每个日期并将其存储到变量中?如何将其转换为一年中的某一天?

我的代码不起作用,因为我无法提取月份/日期,因为有些月份以零开头。我的代码是:

sstDataFile=AQUA_MODIS.20100101_20100131.L3m.MO.SST.sst.4km.nc
year1=int(sstDataFile[11:15])
day1=int(sstDataFile[15:19])
year2=int(sstDataFile[20:24])
day2=int(sstDataFile[24:27])

print(year1)
print(year2)
print (day1)
print(day2)
if year1%4==0:
decYr1 = year1 + day1/366.0
else:   
decYr1 = year1 + day1/365.0
if year2%4==0:
decYr2 = year2 + day2/366.0
else:    
decYr2 = year2 + day2/365.0

decYr=0.5*(decYr1+decYr2) #decimal year between the composite start and end points

您可以使用datetime在python:中解析和执行日期操作

首先,您需要对字符串进行一点操作,以提取与日期有关的部分。假设所有字符串的格式相同(即'SOMETHING.date1_date2.SOMETHINGELSE...'(:

full_string = 'AQUA_MODIS.20100101_20100131.L3m.MO.SST.sst.4km.nc'
date1, date2 = full_string.split('.')[1].split('_')
print(date1, date2)

20100101 20100131

现在我们已经提取了日期,我们需要将它们转换为日期时间格式。您的两个字符串采用以下格式YYYYMMDD。不知何故,我们需要告诉datetime,这是它应该使用的格式。您可以在此处查看更多详细信息。在我们的案例中,它应该是这样的:

fmt='%Y%m%d'  # %Y --> YYYY
# %m --> MM
# %d --> DD
date1 = datetime.strptime(date1, fmt)
date2 = datetime.strptime(date2, fmt)
print(date1, date2)

2010-01-01 00:00:00 2010-01-31 00:00:00

据我所知,你想找到;平均值";以小数表示的年份。Datetime允许您对日期执行操作。我认为在你的情况下最好的方法是:

avg_date = datetime.fromtimestamp((date1.timestamp() + date2.timestamp()) / 2)
print(avg_date)

2010-01-16 00:00:00

最后,您希望将日期表示为一年中的一小部分:

y = avg_date.year
m = (avg_date.month - 1) / 12
d = (avg_date.day - 1) / 365
result = y + m + d
print(result)

相关内容

  • 没有找到相关文章

最新更新