Это мой первый пост, и речь идет о беспокойстве, которое переносит меня более чем на неделю без полезного ответа. У меня есть 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 лет как макс.
Любая помощь?
'03/28/2020' кажется как' ММ/дд/yyyy', но вы анализируя его с помощью 'dd/MM/yyyy'? 28 и 26, конечно, не месячные числа. – RealSkeptic
Если у вас есть проблема, лучше всего создать [mvce] вместо сброса 100 строк строк несвязанного кода. – assylias