matlab两种方法将NC文件中的gregorian日期转换成年月日ymd

在读取某一些科研数据集的时候,采用netcdf的存储格式,其中往往会遇到以下的情况:

time             
           Size:       1x1
           Dimensions: time
           Datatype:   double
           Attributes:
                       units         = 'days since 2002-01-01 00:00:00 UTC'
                       long_name     = 'Time'
                       standard_name = 'Time'
                       axis          = 'T'
                       calendar      = 'gregorian'
                       bounds        = 'time_bounds'

其中读取的时间time表示从2002年1月1日至目前所要读取文件时间为止累计的天数。本人目前有两种解决的思路:

方案一 直接采用matlab自带的函数读取

file = ('GRD-3_2022213-2022243_AOD1B_JPL.nc')
ncdisp(file)
time = ncread(file,'time')
dt = datetime((time)*24*3600, 'ConvertFrom', 'epochtime', 'Epoch', '2002-01-01')

得到的结果是


time =

                    7532.5


dt = 

  datetime

   2022-08-16 12:00:00

方案二 利用文件名中包含的年积日转换成年月日

利用下面的函数将年积日转换成年月日

function [year,month,day] = wzq_yd2ymd(year,doy)
%% convert days in year to year-month-day
% modified from: https://blog.csdn.net/qq_41696018/article/details/119647098
    days_in_month = [31,28,31,30,31,30,31,31,30,31,30,31];
    if(mod(year,4)==0 && (mod(year,100)~=0 || mod(year,400)==0))
        days_in_month(2)=29;
    end
    id = doy;
    month = 0;
    day   = 0;
    for i = 1:12
        id = id - days_in_month(i);
        month = i;
        if(id>0)
            continue
        end
        day = id + days_in_month(i);
        break
    end
end 

% 此处以示例数据 GRD-3_2022213-2022243_AOD1B_JPL.nc
[a1,b1,c1] = wzq_yd2ymd(2022,213)
[a2,b2,c2] = wzq_yd2ymd(2022,243)

得到的结果如下:

a1 =

        2022


b1 =

     8


c1 =

     1


a2 =

        2022


b2 =

     8


c2 =

    31

与方案一得到的结果是一致的!

参考资料:

1.https://ww2.mathworks.cn/matlabcentral/answers/617198-convert-epoch-time-to-yyyymmddhhmmss

2.作者:我是水怪的哥 https://www.bilibili.com/read/cv19156925?spm_id_from=333.999.0.0 出处:bilibili

3.https://blog.csdn.net/weixin_45770896/article/details/111311360

  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是水怪的哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值