Java SimpleDataFormat工作不正常

Java SimpleDataFormat工作不正常,java,spring,hibernate,date,datetime,Java,Spring,Hibernate,Date,Datetime,这是我的第一篇帖子,是关于一个让我担心了一个多星期却没有得到有用答案的问题。我在带有hibernate和spring的表单(JSP)上有一个日期选择器,下面是“表单”标记: 最后一种方法是: public int comparaFecha(String fechaInit, String fechaFin) { int salida = -2; try { logger.info("FECHA INICIO: "+fechaInit); Strin

这是我的第一篇帖子,是关于一个让我担心了一个多星期却没有得到有用答案的问题。我在带有hibernate和spring的表单(JSP)上有一个日期选择器,下面是“表单”标记:

最后一种方法是:

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;
}
好的,现在我的问题是:

当我选择一个日期时,例如:2018年3月26日为开始日期,2020年3月28日为结束日期,当我保存该日期并单击编辑该日期时,它将显示2020年3月2日为开始日期,2022年3月2日为结束日期,当我从表单中获取日期时,该格式是:2018年3月26日 当我用模式“dd/MM/yyyy”解析它时,它会给我一个结果:“mmmdd,yyyy hh:MM:ss a”

然后,它将日期从最初的日期改为大约6个月,最多改为2年


有什么帮助吗?

您使用了一种模式,其中月份是第二个参数(西班牙语日期格式):

您需要使用月/日:

String pattern = "MM-dd-yyyy";

以正确的格式插入日期:

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


用于使解析器严格,然后引发异常

03/28/2020
看起来像是
MM/dd/yyyy
,但您正在使用
dd/MM/yyyyy
对其进行解析?28和26当然不是月数。当你遇到问题时,最好生成一个[mvce],而不是转储100行不相关的代码。
@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;
}
String pattern = "dd-MM-yyyy";
String pattern = "MM-dd-yyyy";
26/03/2018 as starting date and 
28/03/2020 as ending date