Java SimpleDateFormat:模式 - ParseException [重复]

Posted

技术标签:

【中文标题】Java SimpleDateFormat:模式 - ParseException [重复]【英文标题】:Java SimpleDateFormat: Pattern - ParseException [duplicate] 【发布时间】:2017-12-21 13:53:44 【问题描述】:

我正在为一个日期字符串而苦苦挣扎,我需要解析成 java 的“日期”对象。 这是我到目前为止所得到的:

try 

String value =   "2017‎-‎11‎-‎23T14:00:49.184000000Z";
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS'Z'";

SimpleDateFormat parser = new SimpleDateFormat(pattern);

Date date = parser.parse(value);


 catch (ParseException e) e.printStackTrace();

它目前抛出一个 ParseExceptionUnparseable date”,我无法让它工作。

非常感谢任何帮助!

谢谢

【问题讨论】:

只有999 毫秒,所以你想添加纳秒是行不通的。您应该查看新的java.time 包,并更喜欢DateTimeFormatter 是的,Elliot 是对的,184000 毫秒(在 int 范围内)可能有效,但会增加日期的秒数、分钟数、小时数。 在您的值中,年份和第一个连字符之间有一个从左到右的不可见标记(Unicode 8206 或十六进制 200E)。这可以防止解析。字符串中总共有四个,每个连字符前一个,每个连字符后一个。幸运的是,您将它们粘贴到您的问题中,以便我们检测到它们! 很抱歉,链接问题的答案也无法处理您字符串中的控制字符。 @BasilBourque,它确实看起来那样。但是,ISO 8601 标准不包括在导致异常的问题的字符串中发现的不可见控制字符。 OP 需要摆脱这些,然后将受益于使用现代类。 【参考方案1】:

改用 java.time 包 (java 8) 中的 Instant,它应该如下所示

String value = "2017-11-23T14:00:49.184000000Z";
Instant instant = Instant.parse(value);
Date date = Date.from(instant);
System.out.println(date);

【讨论】:

感谢您的解决方案,它按预期工作。但是我仍然很难让它工作。作为@Ole V.V.已经指出,我的传入值字符串中有一些不可见的 uft-8 字符,这混淆了解析。【参考方案2】:

您也可以像这样使用 timeZone 作为另一种解决方案。

TimeZone tz = TimeZone.getTimeZone("Asia/Calcutta");
            Calendar cal = Calendar.getInstance(tz);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS'Z'");
            sdf.setCalendar(cal);
            cal.setTime(sdf.parse("2017-11-23T14:58:00.184000000Z"));
            Date date = cal.getTime();
            System.out.println(date);

【讨论】:

也不行,抱歉。 我试过这个对我来说很好。 预期结果(因为我在一年中的这个时候在 UTC+1):2017 年 11 月 23 日星期四 15:58:00 CET。观察结果:2017 年 11 月 25 日星期六 13:34:40 CET。休息两天。你会得到哪个结果? 我认为时区有问题。使用您的时区代替“亚洲/加尔各答” 这里使用的麻烦类现在是遗留的,完全被行业领先的 java.time 类所取代。

以上是关于Java SimpleDateFormat:模式 - ParseException [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Day025 SimpleDateFormat类

类DateFormat(子类SimpleDateFormat)

抽象类DateFormat及子类SimpleDateFormat

SimpleDateFormat日期格式化总结

Java基础——Date和String的转换

java微信扫码支付(模式二)