4

为什么以下不起作用?似乎最后的字面零是原因......

final DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS0");
format.setLenient(false);

String d = format.format(new Date());
System.out.println(format.parse(d));
4

1 回答 1

7

我不知道为什么需要在模式末尾添加零 (0),但你应该将非模式字母包裹在 '' 中以使其工作:

final DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS'0'");

更多信息:


您的代码的问题出在这一行

System.out.println(format.parse(d));

尝试将超过 3 位数的毫秒解析为 java.util.Date 将导致异常。解析字符串的模式应该是

"yyyy-MM-dd HH:mm:ss.SSS" //without the zero at the end, now your whole code will work...

如果您正在使用纳秒或您的数据有它们,您可以忽略这些值,Java Date/Time API 也不支持纳秒(在文档中他们甚至没有提到它)。

如果您真的非常需要将纳秒用于各种目的,那么您应该坚持使用 String 而不是 Date 对象。

于 2012-07-27T03:56:28.017 回答