2016-11-16 2 views
-3

Это мой первый пост, и речь идет о беспокойстве, которое переносит меня более чем на неделю без полезного ответа. У меня есть DatePicker на форме (JSP) с Hibernate и весной, здесь "форма" тег:Java SimpleDateFormat Не работает должным образом

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib prefix="tag" uri="/WEB-INF/taglibs/customTaglib.tld"%> 
Private Code with Head, Meta, and opening tags 
<form:form method="POST" action="${pageContext.request.contextPath}/save.htm" 
          modelAttribute="formName"> 
          <div class="row"> 
           <!-- /.col-lg-4 (nested) --> 
           <div class="col-lg-4 col-sm-4 col-xs-12"> 

            <div class="form-group"> 
             <label>Starting Date: </label> 
             <form:input type="text" class="form-control" 
              id="agregar_fechainicio" path="agregar_fechainicio" maxlength="10" onkeypress="return event.charCode >= 48 && event.charCode <=57" /> 
            </div> 
            <div class="form-group"> 
             <label>Ending Date: </label> 
             <form:input type="text" class="form-control" 
              id="agregar_fechatermino" path="agregar_fechatermino" maxlength="10" onkeypress="return event.charCode >= 48 && event.charCode <=57" /> 
            </div> 
           </div> 
           <!-- /.col-lg-4 (nested) --> 
          </div> 

          <!-- /.row (nested) --> 
          <div class="row"> 
           <div class="col-lg-4 col-sm-offset-8"> 
            <input type="submit" class="btn btn-default" 
             value="Save" /> <input type="reset" class="btn" 
             value="Reset" /> 
           </div> 
          </div> 
         </form:form> 
         <!-- /.row --> 
        </div> 
        <!-- /.panel-body --> 
       </div> 
       <!-- /.panel --> 
      </div> 

      <!-- /.col-lg-12 --> 


     </div> 
     <!-- /.row --> 

    </div> 
    <!-- /#page-wrapper --> 

</div> 
<!-- /#wrapper --> 

Private Code with others scripts 
<script 
    src="${pageContext.request.contextPath}/resources/js/jquery-ui.js"></script> 
<link rel="stylesheet" 
    href="${pageContext.request.contextPath}/resources/cs/jquery-ui.css"> 
</script> 
<script> 
    $(function() { 
     $.datepicker.setDefaults($.datepicker.regional["es"]); 
     $("#agregar_fechainicio").datepicker({ 
      buttonImage : '${contextPath}/resources/images/calendar2.png', 
      buttonImageOnly : true, 
      showButtonPanel : false, 
      minDate : "0D", 
      defaultDate : "+1d", 
      changeMonth : true, 
      changeYear : true, 
      numberOfMonths : 1, 
      fixFocusIE : false, 
      onSelect : function(selectedDate) { 
       $("#to").datepicker("option", "minDate", selectedDate); 
      } 
     }); 
    }); 
    $(function() { 
     $.datepicker.setDefaults($.datepicker.regional["es"]); 
     $("#agregar_fechatermino").datepicker({ 
      buttonImage : '${contextPath}/resources/images/calendar2.png', 
      buttonImageOnly : true, 
      showButtonPanel : false, 
      minDate : "1D", 
      defaultDate : "+1d", 
      changeMonth : true, 
      changeYear : true, 
      numberOfMonths : 1, 
      fixFocusIE : false, 
      onSelect : function(selectedDate) { 
       $("#to").datepicker("option", "minDate", selectedDate); 
      } 
     }); 
    }); 
</script> 

Теперь Контроллер имеет метод:

@RequestMapping(value = "/save.htm", method = RequestMethod.POST) 
public ModelAndView saveController(
     @ModelAttribute("formName") FormName formName, 
     Integer offset, BindingResult bindingResult, ModelMap model, 
     Integer maxResults) { 
    try { 
     int var = 0; 
     model.addAttribute("offset", offset); 
     model.addAttribute("maxResults", maxResults); 
      // Bloque save 
      int retorno = service.add(formName); 
        *PRIVATE CODE NOT RELATIONED WITH METHOD* 
       field = message.cargaSucess(); 
       msg = alerts.sucessForms(field); 
       model.addAttribute("error", ""); 
       model.addAttribute("warning", ""); 
       // send message over success 
       model.addAttribute("success", msg); 
       formName = new FormName(); 

      model.remove(formName); 
      model.addAttribute("formName", 
        new FormName()); 
    } catch (Exception e) { 
     logger.error("Error in method saveController <[" 
       + e.getMessage() + "]>"); 
     field = mensajes.cargaPagError(); 
     msg = alerts.errorCargaForms(field); 
     model.addAttribute("error", msg); 
     model.addAttribute("warning", ""); 
     model.addAttribute("success", ""); 
     return new ModelAndView("home/dates", "model", 
       model); 
    } 
    return new ModelAndView("home/dates", "model", model); 
} 

И у меня есть следующие вещи в других классах (для проверки правильности даты):

public String validation(
     FormNew formNew) 
     throws ParseException { 
    String fields = ""; 
    DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); 

    if (format.parse(formNew.getAgregar_fechainicio()) 
      .compareTo(
        format.parse(formNew 
          .getAgregar_fechatermino())) >= 1) { 
     fields = fields 
       .concat("Ending date cant be newer than starting date. <br>"); 
    } 
    if (format.parse(formNew.getAgregar_fechainicio()) 
      .compareTo(
        format.parse(formNew 
          .getAgregar_fechatermino())) == 0) { 
     fields = fields 
       .concat("Starting and Edning date are same. <br>"); 
    } 
} 

(Есть некоторый код, который не показал авторскими правами)

Услуги Класс:

@Autowired 
TABLE_DATEDAO tABLE_DATEDAO; 

@Override 
public int add(NewForm newForm) { 
    TABLE_DATE tABLE_DATE = new TABLE_DATE(); 
    // System.out.println("FORMATO FECHA +newForm.getAgregar_fechainicio()); 
    try { 

      DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
      tABLE_DATE.setFechainicio(dateFormat 
        .parse(newForm 
          .getAgregar_fechainicio())); // * 
      tABLE_DATE.setFechatermino(dateFormat 
        .parse(newForm 
          .getAgregar_fechatermino())); // * 
      total = dateFormat.parse(
        newForm.getAgregar_fechainicio()) 
        .compareTo(
          dateFormat.parse(newForm 
            .getAgregar_fechatermino())); 
      Date date = new Date(); 
      tABLE_DATE.setFechacreacion(dateFormat.parse(dateFormat 
        .format(date))); 
      // System.out.println("FORMATO FECHA "+dateFormat.parse(dateFormat.format(date))); 


    } catch (Exception e) { 
     e.printStackTrace(); 
     System.out.println("Wrong at date service method: "+e.getMessage()); 
    } 

    return tABLE_DATEDAO.add(tABLE_DATE); 
} 

и последний метод:

public int comparaFecha(String fechaInit, String fechaFin) { 
    int salida = -2; 
    try { 
     logger.info("FECHA INICIO: "+fechaInit); 
     String pattern = "dd-MM-yyyy"; 
     SimpleDateFormat format = new SimpleDateFormat(pattern); 
     logger.info("salida = dat2.compareTo(dat1);"+fechaFin.compareTo(fechaInit)); 
     Date dat1 = format.parse(fechaInit); 
     logger.info("Fecha INicio Formateada: "+dat1); 
     Date dat2 = format.parse(fechaFin); 
     salida = dat2.compareTo(dat1); 
     //salida = fechaFin.compareTo(fechaInit); 

    } catch (Exception e) { 
     logger.error("Error al comparar la fecha metodo utils " 
       + e.getMessage()); 
     e.printStackTrace(); 
    } 
    return salida; 
} 

Хорошо, теперь вот моя проблема:

Когда я выбираю дату, например: 26.03.2012 в качестве стартовой даты и 03/28/2020 в качестве даты окончания, когда я ее сохраню и нажмите на нее, показывает мне 03/02/2020 как начало и 03/02/2022 в качестве даты окончания, WHEN I Sout (Syso) thedate, который я получил из формы, был в этом формате: 26.03.2012 Когда я разбираю его с шаблоном: dd/MM/yyyy ", это дает мне результат:« MMM dd, yyyy hh: mm: ss a »

И затем оно меняет дату примерно на что-то вроде более 6 месяцев с даты оригинала, примерно до 2 лет как макс.

Любая помощь?

+3

'03/28/2020' кажется как' ММ/дд/yyyy', но вы анализируя его с помощью 'dd/MM/yyyy'? 28 и 26, конечно, не месячные числа. – RealSkeptic

+0

Если у вас есть проблема, лучше всего создать [mvce] вместо сброса 100 строк строк несвязанного кода. – assylias

ответ

0

Вы используете шаблон, где месяц является вторым параметром (испанский DateFormat):

String pattern = "dd-MM-yyyy"; 

Вы должны использовать месяц/день:

String pattern = "MM-dd-yyyy"; 

ИЛИ

Введите даты правильного формата:

26/03/2018 as starting date and 
28/03/2020 as ending date 

ИЛИ

использование Dateformat::setLenient() сделать парсер строги, то поднимая исключение

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