我在解析从ParseException
到String
对象的日期时收到Date
。日期字符串还包含时区。我正在使用此代码:
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
System.out.print(sdf.parse("2018-01-16T00:07:00.000+05:30"));
以下是我得到的错误:
Exception in thread "main" java.text.ParseException: Unparseable date: "2018-01-16T00:07:00.000+05:30"
at java.text.DateFormat.parse(DateFormat.java:366)
答案 0 :(得分:3)
您在<p><a href="http://example.com/?keys%5B%5D=val">..%5B%5D..</a>
<p><a href="http://example.com/?keys[]=val">..[]..</a>
中使用的格式必须与输入group_concat_max_len
匹配。
您的输入为SimpleDateFormat
,即ISO8601 compliant:
String
)2018-01-16T00:07:00.000+05:30
2018-01-16
)T
) 注意:偏移00:07:00.000
不是时区。 Read this了解其中的差异。
无论如何,您使用的模式(+05:30
)与输入字符串不匹配:
+05:30
"yyyy-MM-dd HH:mm:ss z"
(虽然我认为T
可能有效,具体取决于您使用的JVM版本;在我的测试中,它没有)所以你的代码应该是:
X
但是,如果您可以使用新的Java 8类,那么它会更好:
z
如果您仍然需要使用// use "XXX" to parse the whole offset (only one "X" will parse just `+05`, missing the `:30` part)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
Date d = sdf.parse("2018-01-16T00:07:00.000+05:30");
对象,则转换起来很容易:
// parse ISO8601 compliant string directly
OffsetDateTime odt = OffsetDateTime.parse("2018-01-16T00:07:00.000+05:30");
答案 1 :(得分:1)
您使用的是ISO 8601日期。
使用SimpleDateFormat:
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.'SSSX");
System.out.print(sdf.parse("2018-01-16T00:07:00.000+05:30"));
警告,您可以使用提供的ISO 8601解析中的构建:
使用joda时间 Instant:
Instant.parse("2018-01-16T00:07:00.000+05:30")
JAVA 8:(首选评论见下文)
System.out.println(java.time.OffsetDateTime.parse(s));
答案 2 :(得分:1)
更改以下内容:
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
System.out.print(sdf.parse("2018-01-16 0:07:00 +0530"));
您正在尝试解析代表通用时区的z,例如GMT IST等,但是对于India,您需要Z区偏移,如+0530。还要删除字符串之间的OT
。您的日期格式应与模式匹配。
请参阅https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html