2017-01-23 6 views
1

В следующем коде дата изменяется при разборе: В частности, минуты увеличиваются на 5 минут. Почему это происходит?Дата меняется во время разбора

String inputDate="2016-12-01T16:30:59.264448";    
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSSSSS"); 
SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
java.util.Date parsedTimeStamp=null; 

if(!inputDate.contains(".")){ 
    try { 
      parsedTimeStamp = dateFormat1.parse(inputDate.replace("T", " ")); 
    } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
}else{ 
    try { 
    parsedTimeStamp = dateFormat.parse(inputDate.replace("T", " ")); 

    } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
} 
System.out.println("Date-->"+parsedTimeStamp); 
+1

inputDate? где это? –

+0

2016-12-01T16: 30: 59.264448 – user7456985

+1

похоже на 'inputDate', вы имеете в виду строку' parsedInput', это просто опечатка или inputDate - это другая переменная? –

ответ

1

Если у вас есть сильное требование сохранения микросекундной точности на входе, вы можете рассмотреть новый класс java.time.LocalDateTime, представленный на Java-8, который может хранить до наносекунд. И ваш вход не содержит никакой информации о зоне или смещении, поэтому LocalDateTime - лучший выбор как тип. Пример использование только ОДИН форматировщика:

String input1 = "2016-12-01T16:30:59.264448"; 
String input2 = "2016-12-01T16:30:59"; 

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss[.SSSSSS]"); 

LocalDateTime ldt1 = LocalDateTime.parse(input1, dtf); // 2016-12-01T16:30:59.264448 
LocalDateTime ldt2 = LocalDateTime.parse(input2, dtf); // 2016-12-01T16:30:59 

Вы также можете использовать следующий мост старого Date -типа (унаследованного-API):

java.util.Date d = java.util.Date.from(ldt1.atZone(ZoneId.systemDefault()).toInstant()); 
+0

спасибо .... это сработало .. – user7456985

2

2 вещи, если вы посмотрите на документацию для SimpleDateFormat (Java 8 или 7), особенно часть о "Дата и Время Patterns", вы заметили

H Час в день (0 -23)
ч час в час/ч (1-12)

Таким образом, вы должны рассмотреть вопрос об использовании ниже для

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS"); 
SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

и те миллисекунды, которые вы предоставляете, преобразуются в секунды/минуты и, следовательно, результат.

+0

в любом случае я могу хранить его как есть. а затем напечатать также то же самое значение – user7456985

+0

Одна коррекция, хотя. 'SimpleDateFormat' не может разобрать микросекунды, следовательно, использовать SSS вместо SSSSSS. –

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