PySpark中12小时制字符串时间转24小时制失败求助
12小时制字符串转24小时制时间解决方案
首先要明确:date_format函数的作用是格式化已解析的日期时间对象,直接用它处理原始的12小时制字符串必然返回null,因为它无法识别非标准格式的纯文本。针对0123P这类格式(两位小时+两位分钟+上午/下午标识),需要分两步处理:先把字符串解析为合法的日期时间对象,再转换为24小时制格式。
MySQL环境处理方案
结合STR_TO_DATE和DATE_FORMAT函数实现转换:
SELECT DATE_FORMAT(STR_TO_DATE('0123P', '%h%i%p'), '%H:%i:%s') AS converted_time;
STR_TO_DATE('0123P', '%h%i%p'):按照%h(12小时制小时)、%i(分钟)、%p(AM/PM标识)的规则,把字符串解析为日期时间对象DATE_FORMAT(..., '%H:%i:%s'):将解析后的对象按%H(24小时制小时)、%i(分钟)、%s(秒,自动补零)的格式输出,最终得到13:23:00
Python环境处理方案
使用datetime模块的strptime和strftime方法:
from datetime import datetime time_str = '0123P' # 解析字符串为datetime对象 dt_obj = datetime.strptime(time_str, '%I%M%p') # 转换为24小时制格式 converted_time = dt_obj.strftime('%H:%M:%S') print(converted_time) # 输出:13:23:00
%I对应12小时制小时(01-12),%M对应分钟,%p对应AM/PM标识%H对应24小时制小时(00-23),%M对应分钟,%S对应秒
常见问题排查
如果仍返回null,大概率是格式符使用错误:
- 不要混淆
%h/%I(12小时制)和%H(24小时制) - 确保AM/PM标识的大小写匹配:比如MySQL的
%p只识别AM/PM或am/pm,若字符串是a/p,需先预处理补全为am/pm
内容的提问来源于stack exchange,提问作者Amrutha K
相关产品推荐
相关产品推荐

