我有约会2016-03-30T23:59:59.000000+0000
。我可以知道它的格式。
因为如果我使用yyyy-MM-dd'T'HH:mm:ss.SSS
,则会抛出异常
答案 0 :(得分:2)
SimpleDateFormat为您提供答案:
yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ
答案 1 :(得分:2)
如果你真的有微秒不同于零那么我强烈建议不要使用SimpleDateFormat
而是使用Java-8-Time-API或其他可以处理微秒的时间库。而且这并不是旧API被证明非常有限的唯一情况。
SimpleDateFormat
的否定示例(破碎,毫秒消失!!!):
String input = "2016-03-30T23:59:59.123456+0530";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sdf.format(sdf.parse(input))); // 2016-03-30T18:32:02.000456+0000
Java-8-example(有效):
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ");
OffsetDateTime odt = OffsetDateTime.parse(input, dtf);
System.out.println(odt); // 2016-03-30T23:59:59.123456+05:30
如果你从来没有微秒但只有几毫秒而且想坚持使用旧的API那么你可能会尝试跟随黑客攻击:
String input = "2016-03-30T23:59:59.123000+0530";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'xxx'Z");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
sdf2.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sdf2.format(sdf1.parse(input.replace("000", "xxx"))));
2016-03-30T18:29:59.123 + 0000
然而,这个"解决方案" 2000年中断(您可以通过进一步的字符串预处理找到更好的一个),并最终可用的微秒丢失。所以在这里使用SimpleDateFormat
是一个坏主意。