python -- 如何将nc数据中的时间转换为北京时区的时间

  • 在nc数据处理时,以ERA5的小时数据为例,使用的时间为UTC,不同时区存在时间上的差异,如何将其转化为北京当地的时间呢?

  • https://confluence.ecmwf.int/display/CKB/ERA5%3A+data+documentation
    在这里插入图片描述

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Aug  7 20:53:05 2023

@author: xpji
"""



import xarray as xr
import numpy as np
import pandas as pd
from datetime import datetime
from dateutil import tz


def convert_time_zone(input_path, output_path, start_time, end_time):
    # 设置时区
    from_zone = tz.gettz('UTC')
    to_zone = tz.gettz('Asia/Shanghai')

    # 打开NetCDF文件
    pre = xr.open_dataset(input_path)

    # 获取时间变量
    time_str = pd.date_range(start=start_time, end=end_time, freq='1H').strftime('%Y-%m-%d %H:%M:%S')

    result = []
    for t in time_str:
        dt = datetime.strptime(t, '%Y-%m-%d %H:%M:%S').replace(tzinfo=from_zone)
        dt = dt.astimezone(to_zone)
        print('原始时间:', t, '北京时间:', dt)
        result.append(dt)

    result_formatted = []
    for dt in result:
        dt_beijing = dt.strftime('%Y-%m-%d %H:%M:%S')
        result_formatted.append(dt_beijing)

    # 将result_formatted转换为与pre数据集的维度相同的DataArray
    time_beijing = xr.DataArray(result_formatted, dims='time')

    # 创建新的数据集
    pre_beijing = pre.copy(deep=True)
    pre_beijing['time'] = time_beijing

    # 保存为新的NetCDF文件
    pre_beijing.to_netcdf(output_path)

    print("数据已保存为:", output_path)


convert_time_zone('./wind_850hpa_hourly.nc', 
                  './wind_850hpa_hourly_beijing.nc', 
                  '2004-06-15 00:00:00', '2004-06-30 18:00:00')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简朴-ocean

继续进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值