如何将float数组转换为365日历白天? 不包括leap年

问题描述

我有一个cc -o helloworld helloworld.cpp文件,其中日期单位已关闭

nc

我想将这些转换为日期而不考虑leap年,因为我的数据是每年365天的日历,这意味着数据集中没有a年。我已经尝试过了

<xarray.DataArray 'days' (time: 6570)>
array([730817.,730818.,730819.,...,737384.,737385.,737386.])
Dimensions without coordinates: time
Attributes:
    units:      days_since_Jan11900
    long_name:  calendar_days

但是,2004年的leap年给了我比前三年提前一天的机会。因此,该日期从5月29日开始,但这并不正确,因为实际上是每年365天的日历,因此实际上是5月30日。 我想要的是我的时间单位连续显示从2001年5月30日至8月18日,2002年5月30日至8月18日的时间,以此类推,即使在in年也是如此。因此,基本上将我的范围替换为:

ds['days'] = ds.days - 730817
ds.days.attrs['units'] = 'days since 2001-05-30'

我该怎么做?

编辑 我现在尝试包括@spencerkclark的方法

<xarray.DataArray 'days' (time: 6570)>
array([30-05-2001,31-05-2001,18-08-2001,18-08-2015,30-05-2016,])

但是,the年仍然是2月29日。因此,我的最后一个日期向后移到ds['days'] = ds.days - 730817 ds.days.attrs['units'] = 'days since 2001-05-30' ds['days'].attrs['calender'] = 'noleap' ds = xr.decode_cf(ds) ,而它应该保持在2099-11-02。不幸的是,它不是完全固定的。

解决方法

将日历属性添加到'days'坐标,并且xarray将假设'noleap'日历到cftime.DatetimeNoLeap个对象中的时间进行解码:

ds['days'].attrs['calendar'] = 'noleap'
ds = xr.decode_cf(ds)