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

为何默认SimpleDateFormat能解析尼泊尔语(天城文)数字日期?

为什么SimpleDateFormat可以解析天城文数字的日期字符串?

这一现象的核心原因在于SimpleDateFormat默认启用了宽松解析模式(lenient mode),同时JDK对Unicode数字类别字符有自动映射处理:

  • 宽松解析模式的容错能力
    默认情况下SimpleDateFormat的lenient属性为true,它不会严格要求输入字符串的数字字符和格式字符串完全匹配(比如必须是阿拉伯数字),而是会尝试识别并转换符合Unicode数字标准的字符。

  • Unicode数字类别自动映射
    天城文数字(如२对应2、०对应0)属于Unicode中的"Number, Decimal Digit"(通用类别Nd),JDK的数字解析逻辑会自动将这类字符映射为对应的阿拉伯数字值,因此SimpleDateFormat可以正确解析这些数字部分,完成日期转换。

  • 验证:关闭宽松模式会触发异常
    如果手动关闭宽松模式,代码就会抛出ParseException,因为此时严格要求输入字符和格式字符串完全匹配,天城文数字不再被允许:

    public static void main(String[] args) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            sdf.setLenient(false); // 关闭宽松解析
            String parsingDate = "२०२४-११-३० १२:५१:४६";
            try {
                Date date = sdf.parse(parsingDate);
                System.out.println("Date " + date);
            } catch (ParseException e) {
                e.printStackTrace(); // 此处会抛出解析异常
            }
        }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:22:47