簡體   English   中英

Netcdf 數據集從開始時間到 UTC 小時的秒數轉換

[英]Netcdf dataset conversion from seconds from starting time to utc hours

我正在使用 netcdf 格式代碼,我需要將時間從開始時間 (2016-01-01 00:00:00.0) 的秒數轉換為 UTC 時間。 我對這一切都很陌生,所以我真的很掙扎!

我嘗試使用num2date中的netCDF4

from netCDF4 import date2num , num2date, Dataset
time=f.variables['time'][:]
dates=netCDF4.num2date(time[:],time.units)
print(dates.strftime('%Y%m%d%H') for date in dates)

AttributeError: 'MaskedArray' object 沒有屬性 'units'

由於您從time=f.variables['time'][:]中的變量中提取time ,它將失去它的關聯單位(時間只是一個掩碼數組,如錯誤所示)。 您必須提供給num2date()的是variables['time'].units ,例如

from netCDF4 import date2num, num2date, Dataset
file = ... # your nc file

with Dataset(file) as root:
    time = root.variables['time'][:]
    dates = num2date(time, root.variables['time'].units)
    ## directly get UTC hours here:
    # unit_utchours = root.variables['time'].units.replace('seconds', 'hours')
    ## would e.g. be 'hours since 2019-08-15 00:00:00'
    # utc_hours = date2num(dates, unit_utchours)

# check:
print(dates[0].strftime('%Y%m%d%H'))
# e.g. prints 2019081516

...以數字形式獲取日期,例如,您可以這樣做

num_dates = [int(d.strftime('%Y%m%d%H')) for d in dates]
# replace int with float if you need floating point numbers etc.

...要獲取 UTC 小時的日期,請參閱第一個代碼塊中的注釋部分。 由於日期數組包含類型為datetime.datetime的對象,您也可以這樣做

utc_hours = [d.hour+(d.minute/60)+(d.second/3600) for d in dates]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM