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
为什么不打印毫秒?
答案 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)
其他答案都是正确的。
如果您使用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