Simpledateformat不解析毫秒

时间:2014-03-31 19:44:32

标签: java simpledateformat

String dateTimePattern = "yyyy-MM-dd HH:mm:ss.SSS";
SimpleDateFormat sdf = new SimpleDateFormat(dateTimePattern);
Date startTime = sdf.parse("2014-03-14 04:16:58.666");
System.out.println(startTime);

输出

Fri Mar 14 04:16:58 CDT 2014

为什么不打印毫秒?

3 个答案:

答案 0 :(得分:3)

这里的问题不是毫秒没有被解析,你的startTime包括你提供的毫秒数。问题是它们没有被打印出来。

如果您需要Date#toString()以外的默认格式,则需要格式化输出:

  

将此Date对象转换为表单的String:    dow mon dd hh:mm:ss zzz yyyy

您也可以使用SimpleDateFormat格式化输出,这将为您提供毫秒:

System.out.println(sdf.format(startTime));

答案 1 :(得分:3)

您正在直接打印startTime(例如来自java.util.Date的toString());如果您希望输出与指定的DateFormat匹配,则可以 -

 String dateTimePattern = "yyyy-MM-dd HH:mm:ss.SSS";
 SimpleDateFormat sdf = new SimpleDateFormat(dateTimePattern);
 Date startTime = sdf.parse("2014-03-14 04:16:58.666");
 System.out.println(sdf.format(startTime)); // <-- use the DateFormat.

将输出

2014-03-14 04:16:58.666

答案 2 :(得分:1)

其他答案都是正确的。

避免使用j.u.Date

如果您使用Joda-Time(或Java 8中的java.time package)而不是臭名昭着的java.util.Date&amp ;;那么您将拥有更简单的代码并且不会产生混淆。 .Calendar&amp;与Java捆绑在一起的java.text.SimpleDateFormat类。

约达时间

Joda-Time内置了ISO 8601格式的自动解析器。如果用T替换该空格,您的格式将有效。

使用Joda-Time 2.3的示例代码...

String inputRaw = ( "2014-03-14 04:16:58.666" );
String input = inputRaw.replace( " ", "T" );

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime dateTime = new DateTime( input, timeZone );

DateTime dateTimeUtc = dateTime.withZone( DateTimeZone.UTC );

转储到控制台...

System.out.println( "input: " + input );
System.out.println( "dateTime: " + dateTime );
System.out.println( "dateTimeUtc: " + dateTimeUtc );

跑步时......

input: 2014-03-14T04:16:58.666
dateTime: 2014-03-14T04:16:58.666+01:00
dateTimeUtc: 2014-03-14T03:16:58.666Z