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
Почему не печатает миллисекунды?
Проблема здесь не в том, что миллисекунды не обрабатываются, ваш startTime
включает миллисекунды, которые вы предоставили. Проблема в том, что они не печатаются.
Вам нужно отформатировать свой вывод, если вы хотите, чтобы что-то отличное от формата по умолчанию от Date#toString()
:
Преобразует этот объект Date в String формы: dow mon dd hh: mm: ss zzz yyyy
Вы можете использовать свой SimpleDateFormat
для форматирования вывода, который даст вам миллисекунды:
System.out.println(sdf.format(startTime));
startTime
, это просто влияет на вывод.
Вы напрямую печатаете startTime
(например, toString() из java.util.Date); если вы хотите, чтобы ваш результат соответствовал указанному вами дате 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
Другие ответы верны.
У вас был бы более простой код и ни одна из этих путаниц, если бы вы использовали Joda-Time (или пакет java.time в Java 8), а не печально известные классы java.util.Date &.Calendar & java.text.SimpleDateFormat в комплекте с Java.
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
.toString()
Date
по умолчанию; если вы хотите другой формат, повторно используйтеSimpleDateFormat
которого есть метод для форматированияDate
вString