簡體   English   中英

Python - 在 netCDF 文件中將 UTC 更改為本地時間

[英]Python - Change UTC to local time in netCDF file

我正在使用來自 ECMWF 的 ERA5 土地每小時數據,其中包含氣候變量。

該文件的一般方面是:

'era5-hourly-2m_temperature_firstfourdays-january_2017.nc'

Dimensions:    (latitude: 184, longitude: 129, time: 96)
Coordinates:
  * longitude  (longitude) float32 -81.4 -81.3 -81.2 -81.1 ... -68.8 -68.7 -68.6
  * latitude   (latitude) float32 -0.1 -0.2 -0.3 -0.4 ... -18.2 -18.3 -18.4
  * time       (time) datetime64[ns] 2017-01-01 ... 2017-01-04T23:00:00
Data variables:
    t2m        (time, latitude, longitude) float32 ...
Attributes:
    Conventions:  CF-1.6
    history:      2020-01-09 19:38:29 GMT by grib_to_netcdf-2.15.0: /opt/ecmw...

這是一個包含許多變量和觀察結果的信息矩陣。

在之前的任何分析之前,我想使用 Python將 UTC 時間轉換為本地時間 (UTC-5) 我用谷歌搜索並瀏覽了許多頁面和論壇,但沒有找到任何可以回答我的問題的內容。 我意識到命令在一系列帖子中的存在:

日期時間, pytz , tzinfo , astimezone ,

和其他示例,但沒有一個示例考慮 netCDF 文件。

提前致謝。

首先,我建議您盡可能省去很多麻煩並在 UTC 中工作。

如果您確實需要本地時間,則datetimezoneinfo是您的選擇。 順便說一下,轉換與netcdf無關,但請記住, netCDF4模塊提供了有用的函數num2datedate2num [docs]

from datetime import datetime, timezone
from zoneinfo import ZoneInfo # Python 3.9+

string = '2017-01-04T23:00:00'
dt_obj = datetime.fromisoformat(string)

# note that dt_obj is naive, i.e. it has no timezone info, so let's add it:
dt_obj = dt_obj.replace(tzinfo=timezone.utc)
print(datetime.strftime(dt_obj, '%Y-%m-%dT%H:%M:%S %Z %z'))
# 2017-01-04T23:00:00 UTC +0000

# now let's shift time to another timezone:
new_timezone = ZoneInfo('US/Eastern')
dt_obj = dt_obj.astimezone(new_timezone)
print(datetime.strftime(dt_obj, '%Y-%m-%dT%H:%M:%S %Z %z'))
# 2017-01-04T18:00:00 EST -0500

暫無
暫無

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

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