2015-10-12 73 views
3

我正在通過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的格式?如何將相對日期轉換爲絕對日期?

+2

不知道你在這段日期/時間裏添加了那些小時後是如何得到'2015-10-07 00:00:00'的? – EdChum

回答

4

您可以使用dt.strptime到您的字符串解析爲一個日期時間對象,然後構造一個dt.timedelta對象,並設置PARAM 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

6

由於起始日期是恆定的,創建一個DateTime對象,只是增加你想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

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注意:如果你使用的是netCDF4包

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

2015101012 
+0

如何將格式爲YYYY-MM-DD HH:MM:SS的日期轉換爲YYYYMMDDHH? – jms1980

+0

檢查我的編輯。你需要實現'strftime' – Leb

4

,你應該使用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函數將採用日期列表或數組。