01 问题的提出
这里遇到一个问题:
对于下方的文件名,
如何将其中的例如2020042(表示2020年的第42天) 、2022003(表示2022年的第3天)等转换为年月日的格式。
02 思路解决
如果不想细看,这里给出三个关键函数:
julday函数:
Result = JULDAY(Month, Day, Year, Hour, Minute, Second [, /MODIFIED])
caldat函数:
CALDAT, Julian, Month [, Day [, Year [, Hour [, Minute [, Second]]]]] [, /MODIFIED]
file_move函数:
FILE_MOVE, SourcePath, DestPath [, /ALLOW_SAME] [, /NOEXPAND_PATH] [, /OVERWRITE] [, /REQUIRE_DIRECTORY] [, /VERBOSE]
具体使用可以查看文档,这里不再详细说明。
给出转换代码,这里仅提供思路。
pro days2_specific_date ; 该程序用于解决如何将Year-Days ==> Year-Month-Day ; 定义文件路径目录和文件名前缀 dir = 'path/to/files/' ; 所有文件放置的目录路径 prefix = 'MYD04_3K.A' ; 所有文件名称的公共部分 ; 获取文件列表 files = file_search(dir + prefix + '*.tif*', count=n_files) ; 遍历每个文件并处理文件名 for i=0, n_files-1 do begin ; 获取文件名 full_path = files[i] filename = file_basename(full_path) ; 提取年份和儒略日信息 year = strmid(filename, 10, 4) day_of_year = strmid(filename, 15, 3) ; 将儒略日转换为日期格式 date = julday(year, 1, 1) + day_of_year - 1 CALDAT, date, year, month, day ; 生成新的文件名 new_filename = prefix + string(year, FORMAT='(I4.4)') + $ string(month, FORMAT='(I2.2)') + $ string(day, FORMAT='(I2.2)') + $ '.tif' ; 重命名文件 file_move, full_path, dir + new_filename endfor end