2016-09-30 7 views
1

netcdf 파일에 시간 절약을 저장하려고합니다. 발견 한 문서에 따르면, netCDF4 모듈의 date2num 메소드를 사용하여이 작업을 수행 할 수 있습니다. 나는 그것이 그러나 작업을 얻을 수 없다 (아래 예 참조) :(시간대 인식) 파이썬을 사용하는 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() 

오류를 그것이 나 제공 :에

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는 파이썬을 사용합니까?

+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)