2016-09-30 23 views
1

netcdfファイルにタイムスルーを保存しようとしています。私が見つけたドキュメントによると、これはnetCDF4モジュールのdate2numメソッドを使って行うことができます。私は(以下の例を参照)、それはしかし、働いて得ることができません。(タイムゾーン対応)pythonを使ったnetcdfのdatetime

from datetime import datetime as dt 
from netCDF4 import Dataset 
from netCDF4 import num2date, date2num 
import pytz 

filename = 'test.nc' 
root = Dataset(filename, 'w', format='NETCDF4_CLASSIC') 
root.name = 'test' 

# create dimension 
root.createDimension('datetime', None) 

# create variable 
timeserie = root.createVariable('timeserie', 'f4', ('datetime',)) 
timeserie.units = 'days since 1970-01-01 00:00:00 UTC' # reference: epoch 
timeserie.calendar = 'gregorian' 

# create testList 
listDT = [dt.now(pytz.utc), dt(1970, 1, 2, 12, 0, 0, 0, pytz.utc)] 
print date2num(listDT, units=timeserie.units, calendar=timeserie.calendar) 

root.close() 

エラーそれは私を与える:

私は(好ましくは、タイムゾーンを意識)datetimeデータを保存する方法を
Traceback (most recent call last): 
    File "test.py", line 20, in <module> 
    print date2num(listDT, units=timeserie.units, calendar=timeserie.calendar) 
    File "netCDF4\_netCDF4.pyx", line 5128, in netCDF4._netCDF4.date2num (netCDF4\_netCDF4.c:60367) 
TypeError: can't subtract offset-naive and offset-aware datetimes 

にnetcdfはPythonを使っていますか?

+0

これはあなたの質問に答えましたか? –

答えて

0

date2num() docは、datetimeオブジェクトはUTCでなければならないと言います。番号は、UTCでない限り、タイムゾーンを認識することはできません。標準/夏時間の移行に大きな問題を引き起こすでしょう。

それがタイムゾーンを認識していることを証明するために

listDT = [dt.now(), dt(1970, 1, 2, 12, 0, 0, 0)] 
print date2num(listDT, units=timeserie.units, calendar=timeserie.calendar) 

を試してみて、東は単位としてオフセットしてみてください。

print date2num(listDT, units='days since 1970-01-01 00:00:00-04:00', calendar=timeserie.calendar)