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

Java 8如何解析包含阿拉伯-印度数字的日期时间及时区字符串

问题根因

你遇到的解析报错是因为java.time.DateTimeFormatter的内置偏移量格式规则(对应你代码里的XXX模式)默认仅支持ASCII数字解析,不会继承你通过withDecimalStyle配置的阿拉伯-印度数字规则。报错位置索引19刚好是时区偏移量的第一个数字位,因此时区部分用ASCII数字时可以正常解析,用阿拉伯-印度数字时就会抛出异常。

解决方案

推荐直接对输入字符串做数字转写预处理,将阿拉伯-印度数字统一转换为ASCII数字后再解析,实现成本最低,兼容性最好:

// 阿拉伯-印度数字转ASCII数字工具方法
private static String arabicIndicToAsciiDigits(String input) {
    StringBuilder result = new StringBuilder(input.length());
    for (char c : input.toCharArray()) {
        // 判断是否为阿拉伯-印度数字区间
        if (c >= '\u0660' && c <= '\u0669') {
            // 转换为对应ASCII数字
            result.append((char) ('0' + (c - '\u0660')));
        } else {
            result.append(c);
        }
    }
    return result.toString();
}

// 解析逻辑
String dateTime = "٢٠٢١-١١-٠٨T٠٢:٢١:٠٨+٠٢:٠٠";
String converted = arabicIndicToAsciiDigits(dateTime);
// 转写后符合ISO 8601格式,直接用内置实例解析即可
ZonedDateTime parsedDateTime = ZonedDateTime.parse(converted, DateTimeFormatter.ISO_ZONED_DATE_TIME);

如果不想做字符串预处理,也可以通过DateTimeFormatterBuilder自定义偏移量解析规则,手动实现阿拉伯-印度数字的偏移量识别,不过实现复杂度较高,没有特殊要求优先使用预处理方案即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:06:02