ENVI_IDL: 如何批量将Year-Days文件名转换为Year-Month-Day文件名?

  • Post author:
  • Post category:其他



目录


01 问题的提出


02 思路解决


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