2012-03-26 3 views
2

Я пытаюсь преобразовать строку даты ввода в формат даты, а затем в формат даты и времени. В качестве теста я дал неверный формат даты, но это, похоже, не бросает никаких исключений синтаксического разбора и не дает мне неправильного вывода. Любые мысли о том, что мой код ниже делает неправильно?Неверная формулировка даты

  String OLD_FORMAT ="MM/dd/yyyy"; 
      String NEW_FORMAT ="yyyyMMdd HHmmss"; 
      SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT); 
      String oldDateString = "03/01211/2012"; //Incorrect input 
      Date myOldDate; 
      Datetime myNewDate; 
      try { 
       myOldoldDate = sdf.parse(oldDateString); 
      //Returns Wed Jun 24 00:00:00 IST 2015...why?? 
      //Shouldn't this be throwing a parse exception? 
      } catch (ParseException e) { 
       logger.error("Error while parsing Date"); 
      } 
      sdf.applyPattern(NEW_FORMAT); 
      //Converting date to datetime format 
      try { 
       myNewDate= DateHelper.toDatetime(sdf.parse((sdf.format(myOldDate)))); 
      //Returns 2015-06-24 00:00:00.0 
      } catch (ParseException e) { 
       logger.error("Error while parsing Date"); 
      } 
+1

Можете ли вы попробовать 'sdf.setLenient (false)'? – Thilo

+0

Просто сделал и исправил проблему –

+0

@Thilo Yeah..I могу попробовать это, но в чем его цель? Извините, новичок в Java, вот почему :) – user656523

ответ

4

"03/01211/2012" => 24 июня 00:00:00 IST 2015 ... почему?

Моя догадка заключается в том, что 24 июня 2015 года 1211 дней с 1 марта 2012 года. Чрезмерное опрокидывание, читается 12 марта.

Вы должны быть в состоянии повернуть это с:

sdf.setLenient(false) 

общественного недействительными setLenient (булево снисходительны)

Укажите, следует ли интерпретация дата/время, чтобы быть снисходительным. При мягкой интерпретации такая дата, как «Февраль 942, 1996», будет считаться эквивалентной 941-й день после 1 февраля 1996 года. При строгом толковании такие даты приведут к исключению исключения.

+0

Спасибо, это работает! +1 :) – user656523

1

Вы можете установить строгий формат

SimpleDateFormat.setLenient(false)

Укажите, следует ли дата/время синтаксического анализа должен быть мягким. При мягком анализе анализатор может использовать эвристику для интерпретации входов, которые не точно соответствуют формату этого объекта. При строгом анализе входные данные должны соответствовать формату этого объекта.

1

Не смотря на исходный код, я предполагаю, что 01211 разобран 1211 дням, которые добавляются к 2012-03-01, таким образом, в результате 2015-06-24. Как сказал @Thilo, sdf.setLenient(false) должен помочь здесь.

Проблема заключается в том, что по умолчанию анализатор более терпим к неправильному вводу (режим по умолчанию включен) и, таким образом, здесь не будет выбрано исключение.

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