我有一个文件列表,其中包含两个日期。如何提取每个日期并将其存储到变量中?如何将其转换为一年中的某一天?
我的代码不起作用,因为我无法提取月份/日期,因为有些月份以零开头。我的代码是:
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)