Pergunta

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);

Output

Fri Mar 14 04:16:58 CDT 2014

Why is not printing milliseconds?

Foi útil?

Solução

The problem here is not that the milliseconds are not getting parsed, your startTime includes the milliseconds you have provided. The problem is that they are not getting printed.

You need to format your output if you want something other than the default format from Date#toString():

Converts this Date object to a String of the form: dow mon dd hh:mm:ss zzz yyyy

You can use your SimpleDateFormat to format your output too, which will give you milliseconds:

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

Outras dicas

You are printing startTime directly (e.g. the toString() from java.util.Date); if you want your output to match your specified DateFormat you could do -

 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.

Which will output

2014-03-14 04:16:58.666

The other answers are correct.

Avoid j.u.Date

You would have simpler code and none of that confusion if you used Joda-Time (or java.time package in Java 8) rather than the notoriously troublesome java.util.Date & .Calendar & java.text.SimpleDateFormat classes bundled with Java.

Joda-Time

Joda-Time has built-in automatic parsers for ISO 8601 formats. Your format would work if you replaced that space with a T.

Example code using 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 );

Dump to console…

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

When run…

input: 2014-03-14T04:16:58.666
dateTime: 2014-03-14T04:16:58.666+01:00
dateTimeUtc: 2014-03-14T03:16:58.666Z
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top