You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:在Pandas中将带时区的字符串转换为指定时间的方法

嘿,这个需求其实挺 straightforward 的,核心就是正确解析带时区偏移的时间字符串,再精准转换到目标时间。我给你整理了两种最常用编程语言的实现方案,都是生产环境里能用的:


Python 方案(优先用标准库)

Python 3.9+ 自带了zoneinfo模块处理时区,完全不需要第三方库就能搞定。步骤很清晰:

  • 先把带时区的字符串解析成时区感知的datetime对象(这步很关键,不然没法正确处理时区偏移)
  • 直接转换到UTC时区,刚好就是你要的减8小时后的时间
  • 如果需要不带时区信息的datetime(比如存数据库),再去掉时区标记

代码示例:

from datetime import datetime
from zoneinfo import ZoneInfo  # Python 3.9+ 可用,旧版本换 pytz.utc 即可

# 原始时间字符串
time_str = "2019-02-28 06:15 +08:00"

# 解析带时区的字符串,%z 用来匹配时区偏移
dt_with_tz = datetime.strptime(time_str, "%Y-%m-%d %H:%M %z")
# 转换到UTC时区
target_dt = dt_with_tz.astimezone(ZoneInfo("UTC"))

# 若需要不带时区的datetime对象
target_dt_naive = target_dt.replace(tzinfo=None)

print(target_dt)  # 输出:2019-02-27 22:15:00+00:00
print(target_dt_naive)  # 输出:2019-02-27 22:15:00

JavaScript 方案(原生/轻量库都可)

原生JS实现

原生Date对象就能处理带时区的字符串,只需要先把格式转成ISO标准格式:

const timeStr = "2019-02-28 06:15 +08:00";
// 转成ISO格式,让Date对象能正确解析
const isoStr = timeStr.replace(" ", "T");
const date = new Date(isoStr);

// 直接获取UTC时间的各个字段,构造目标时间
const targetDate = new Date(
  date.getUTCFullYear(),
  date.getUTCMonth(), // 注意JS月份是0-11
  date.getUTCDate(),
  date.getUTCHours(),
  date.getUTCMinutes()
);

console.log(targetDate.toISOString().slice(0, 16)); // 输出:2019-02-27T22:15

Day.js 实现(更简洁)

如果项目里用Day.js,加上时区插件后一行就能搞定:

import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';

dayjs.extend(utc);

const timeStr = "2019-02-28 06:15 +08:00";
const targetDt = dayjs(timeStr).utc();

console.log(targetDt.format("YYYY-MM-DD HH:mm")); // 输出:2019-02-27 22:15

重要提醒

千万别手动做字符串切割或者硬减8小时!因为涉及夏令时、闰秒等特殊场景,用标准库的时区处理逻辑才是最可靠的。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:14:03