2016-05-12 2 views
-8

Я использую логику преобразования, как показано ниже, для преобразования входящего строка в дату. Но, «часть времени» не получается правильно преобразовываться на выходе. Ниже вы найдете код и вывод.Преобразование String to Date в Java с форматом yyyy-MM-dd-HH.mm.ss.SSSSSS в yyyy-MM-dd HH: mm: ss: SSSSSS

 String inputDate ="2016-04-22-00.56.03.389289"; 
     System.out.println(inputDate); 
     String frmFormat = "yyyy-MM-dd-HH.mm.ss.SSSSSS"; 
     String toFormat = "yyyy-MM-dd HH:mm:ss:SSSSSS"; 
     DateFormat from = new SimpleDateFormat(frmFormat); 
     DateFormat to = new SimpleDateFormat(toFormat); 
     try { 
       Date date = from.parse(inputDate); 

       System.out.println("New date:" + to.format(date)); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

ВЫВОД: Новая дата: 2016-04-22 01: 02: 32: 000289

Пожалуйста, помогите мне, чтобы получить правильный вывод.

+0

Перед отправкой внимательно просмотрите переполнение стека. –

ответ

0

Даты Java поддерживают только миллисекунды. Однако для вашей даты требуется разрешение в микросекундах.

Проблема в вашем формате даты - это последняя часть: .SSSSSS. Это формат для миллисекунд. И 389289 миллисекунд - 389 секунд плюс 289 миллисекунд. Таким образом, 389 секунд добавляются к вашей дате, а часть миллисекунды недействительна.

Либо отрезать последние три цифры, либо искать другой класс Java, который поддерживает микросекунды.

0

Для JDK 8 вы можете просто использовать:

private static final DateTimeFormatter FRMFORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH.mm.ss.SSSSSS"); 
private static final DateTimeFormatter TOFORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH:mm:ss:SSSSSS"); 

Объяснение в том, что если вы идете в SimpleDateFormat ИПН и DateTimeFormatter апи:

  1. https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
  2. https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

Вы заметите, что для SimpleDate Формат у вас есть что:

S миллисекунды Номер 978

И DateTimeFormatter у вас есть:

S фракция-из-второй фракции 978

Как вы можете см. в SimpleDateFormat, у вас есть, что S действительно только миллисекунда, тогда как в DateTimeFormatter, S, на самом деле является более широким числом, что означает с доля секунды.

Смежные вопросы