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

H2数据库:不同系统下PARSEDATETIME函数解析异常问题

问题原因与解决建议

问题原因

核心原因是系统区域设置(Locale)不一致:
H2数据库的PARSEDATETIME函数默认采用运行环境的系统Locale解析时间字符串。你的本地环境使用英文Locale,能正常识别pm/am这类英文上午/下午标识,但客户机器的系统Locale可能为中文或其他非英文语言,导致解析器无法识别pm标识,最终在字符串索引18的位置(对应pm的起始位置)抛出解析异常。

解决建议

  • 显式指定英文Locale(推荐方案)
    H2的PARSEDATETIME支持第三个参数指定Locale,修改SQL语句,强制使用英文Locale解析:

    PARSEDATETIME(created, 'M/d/yyyy h:mm:ss a', 'en_US')
    

    这种方式不依赖系统环境,能确保在任何Locale下都正常解析英文格式的时间字符串。

  • 切换为24小时制格式(如果业务允许)
    如果业务场景不需要区分上午/下午,可以将时间格式改为24小时制,去掉a标识,使用HH(24小时制小时)代替h(12小时制小时):

    PARSEDATETIME(created, 'M/d/yyyy HH:mm:ss')
    

    注意:此方案需要确保输入的时间字符串是24小时制格式,否则会出现解析错误。

  • 调整客户机器Locale(不推荐)
    让客户将系统临时切换为英文Locale,但这种方法依赖外部环境,稳定性差,仅适合临时排查问题,不适合作为长期解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:18:20