Python中不同时区日期字符串标准化并转UTC时间的实现方法
带时区偏移时间转UTC标准时间方案
通用转换逻辑
- 先提取时间字符串中的偏移量部分(例如
+05:30、-03:00),换算成总偏移秒数:正偏移代表当地时间比UTC快,转UTC要减去对应秒数;负偏移代表当地时间比UTC慢,转UTC要加上对应秒数 - 将本地时间部分按偏移量调整后,格式化输出为
YYYY-MM-DD HH:MM:SS格式即可
Python 实现
依赖标准库datetime即可,无需安装第三方依赖:
from datetime import datetime def offset_to_utc(time_str: str) -> str: # 解析带偏移的时间字符串 dt = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S%z") # 转换为UTC时区 dt_utc = dt.astimezone(datetime.timezone.utc) # 格式化输出,去除时区信息 return dt_utc.strftime("%Y-%m-%d %H:%M:%S") # 测试用例 print(offset_to_utc("2021-08-03 18:25:34+05:30")) # 输出 2021-08-03 12:55:34 print(offset_to_utc("2021-08-23 21:51:35-03:00")) # 输出 2021-08-24 00:51:35
JavaScript 实现
浏览器、Node.js环境通用:
function offsetToUtc(timeStr) { // 替换空格为T适配Date构造函数的ISO格式要求 const date = new Date(timeStr.replace(' ', 'T')); // 补前导0工具函数 const pad = num => String(num).padStart(2, '0'); return `${date.getUTCFullYear()}-${pad(date.getUTCMonth()+1)}-${pad(date.getUTCDate())} ${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}:${pad(date.getUTCSeconds())}`; } // 测试用例 console.log(offsetToUtc("2021-08-03 18:25:34+05:30")) // 输出 2021-08-03 12:55:34
Java 实现
适配Java 8+版本,使用官方推荐的新时间API:
import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.ZoneOffset; public class TimeConverter { private static final DateTimeFormatter INPUT_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssXXX"); private static final DateTimeFormatter OUTPUT_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); public static String offsetToUtc(String timeStr) { ZonedDateTime zdt = ZonedDateTime.parse(timeStr, INPUT_FORMAT); ZonedDateTime utcZdt = zdt.withZoneSameInstant(ZoneOffset.UTC); return utcZdt.format(OUTPUT_FORMAT); } public static void main(String[] args) { System.out.println(offsetToUtc("2021-08-03 18:25:34+05:30")); // 输出 2021-08-03 12:55:34 } }
内容的提问来源于stack exchange,提问作者OTOT
相关产品推荐
相关产品推荐

