BigQuery日期格式转换求助:字符串与UTC时间格式互转
日期格式双向转换解决方案
正向转换:DD-MM-YYYY HH:MM → YYYY-MM-DD HH:MM:SS.ffffff UTC
输入字符串12-04-2023 22:30的格式是日-月-年 时:分,转换时需先解析为datetime对象,再绑定UTC时区并补全秒、微秒信息。
Python标准库实现
from datetime import datetime, timezone # 输入日期字符串 input_date = "12-04-2023 22:30" # 按指定格式解析为datetime对象 parsed_dt = datetime.strptime(input_date, "%d-%m-%Y %H:%M") # 绑定UTC时区,补全微秒(此处设为0,可按需调整) utc_dt = parsed_dt.replace(tzinfo=timezone.utc) # 格式化为目标字符串 target_format = utc_dt.strftime("%Y-%m-%d %H:%M:%S.%f UTC") print(target_format) # 输出:2023-04-12 22:30:00.000000 UTC
Pandas实现(对应你提到的parse_datetime)
使用Pandas的pd.to_datetime必须明确指定格式参数,否则解析器会误判日期结构:
import pandas as pd # 解析并转换 input_series = pd.Series(["12-04-2023 22:30"]) utc_dates = pd.to_datetime(input_series, format="%d-%m-%Y %H:%M") \ .dt.tz_localize("UTC") \ .dt.strftime("%Y-%m-%d %H:%M:%S.%f UTC") print(utc_dates.iloc[0]) # 输出:2023-04-12 22:30:00.000000 UTC
反向转换:YYYY-MM-DD HH:MM:SS.ffffff UTC → DD-MM-YYYY HH:MM
提取年-月-日 时:分:秒.微秒 UTC格式中的日期和时分信息,转换为日-月-年 时:分格式。
Python标准库实现
from datetime import datetime # 输入带UTC的日期字符串 input_utc_date = "2023-04-11 17:32:38.171728 UTC" # 按包含时区的格式解析 parsed_utc_dt = datetime.strptime(input_utc_date, "%Y-%m-%d %H:%M:%S.%f %Z") # 格式化为目标字符串 target_format = parsed_utc_dt.strftime("%d-%m-%Y %H:%M") print(target_format) # 输出:11-04-2023 17:32
Pandas实现
import pandas as pd input_series = pd.Series(["2023-04-11 17:32:38.171728 UTC"]) original_dates = pd.to_datetime(input_series, format="%Y-%m-%d %H:%M:%S.%f %Z") \ .dt.strftime("%d-%m-%Y %H:%M") print(original_dates.iloc[0]) # 输出:11-04-2023 17:32
转换失败的核心原因
之前用parse_datetime或cast失败,主要是未指定匹配的格式符:
%d对应两位日、%m对应两位月、%Y对应四位数年份,必须严格匹配输入字符串的结构- 带UTC的字符串解析时要加
%Z格式符,否则无法识别时区标识 - Pandas的
cast无法直接处理自定义日期格式,需先通过pd.to_datetime解析为datetime类型再转换格式
内容的提问来源于stack exchange,提问作者Shubham Kukreti
相关产品推荐
相关产品推荐

