(时区感知)netcdf中使用python的datetime

2024-05-19 12:34:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在netcdf文件中保存时间序列。根据我发现的文档,这可以使用netCDF4模块中的date2num方法来完成。但我无法使其正常工作(请参阅下面的示例):

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

如何使用python将日期时间数据(最好是时区感知)保存到netcdf?在


Tags: fromtestimportdatetimecreatedtnetcdfroot
1条回答
网友
1楼 · 发布于 2024-05-19 12:34:48

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)

为了证明它是时区感知的,尝试东方偏移作为单位。在

^{pr2}$

相关问题 更多 >