如何将相对日期转换为绝对日期?

时间:2015-10-12 21:36:29

标签: python datetime netcdf

我正在通过Python查看netcdf文件,netcdf文件上的日期是138276,这是自2000-01-01 00:00:00以来的小时数。这个日期对应10月7日。如何将2000-01-01 00:00:00以来的138276小时的日期转换为2015-10-07 00:00:00的格式?

4 个答案:

答案 0 :(得分:6)

由于开始日期是常量,因此请创建一个日期时间对象,只需添加您想要的任何小时using datetime.timedelta

from datetime import datetime, timedelta

start = datetime(2000,1,1,0,0,0)

new = start + timedelta(hours=138276)

print(new)
2015-10-10 00:00:00

答案也是2105-10-10而不是2015-10-07

答案 1 :(得分:4)

您可以使用dt.strptime将字符串解析为日期时间对象,然后构造dt.timedelta对象并设置参数hours=your_val以添加所需的小时数:

In [25]:
import datetime as dt
dt.datetime.strptime('2000-01-01 00:00:00', '%Y-%m-%d %H:%M:%S') + dt.timedelta(hours=138276)

Out[25]:
datetime.datetime(2015, 10, 10, 12, 0)

目前还不清楚当2015-010-07 2015-10-10时到达client.socket.close()的目标日期?

答案 2 :(得分:4)

如果您使用的是netCDF4软件包,则应使用num2date函数。

In [1]: from netCDF4 import num2date

In [2]: date = num2date(138276, 'hours since 2000-01-01 00:00:00', calendar='standard')

In [3]: date
Out[3]: datetime.datetime(2015, 10, 10, 12, 0)

最有可能的是,你的netCDF时间变量也有单位和日历,所以你可能不需要对它们进行硬编码。实际上,num2date函数将采用日期列表或数组。

答案 3 :(得分:1)

timedelta正确增加小时数。你的日期计算有点偏离。

from datetime import datetime, timedelta

old_date = '2000-01-01'

curr_date = datetime.strptime(old_date, '%Y-%m-%d') + timedelta(hours=138276 )

print(curr_date)

2015-10-10 12:00:00

要更改输出格式,请将curr_date更改为:

print(curr_date.strftime('%Y%m%d%H'))

2015101012