Java 数据库中输入的日期格式不正确

Java 数据库中输入的日期格式不正确,java,date,simpledateformat,Java,Date,Simpledateformat,我正在使用以下日期代码来格式化从dd-mm-yyyy到yyyy-mm-dd-hh:mm:ss的日期。但有几天我在生产中错误地使用了以下代码: try { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); java.util.Date utilDate = format.parse("22-10-2016 00:00:00"); java.sql.Date s

我正在使用以下日期代码来格式化从dd-mm-yyyy到yyyy-mm-dd-hh:mm:ss的日期。但有几天我在生产中错误地使用了以下代码:

try {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        java.util.Date utilDate = format.parse("22-10-2016 00:00:00");
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
        System.err.println(sqlDate);
     } catch (Exception e) {
     }
其日期为
0028-04-07

所以现在在我的例子中,我有大约300个条目由于它而格式不正确,有没有办法找回正确的日期

我看到了日期遵循的模式:

23-10-2016 --> 0029-04-07
24-10-2016 --> 0030-04-08
25-10-2016 --> 0031-04-08
26-10-2016 --> 0032-04-07

因此,在有人帮助之前,请继续努力。

我对该解决方案所提供的内容持乐观态度。 您可能不太清楚,但通过将2016年推迟到几天,Java自动将其向前推进。因此,如果你的一年是23年,那么它已经向前推进了近6年。 我认为这个示例代码,将为您提供很多方法。我的想法是,因为这是一个支持问题,不会在很长时间内不被注意,它只会影响2016年

public static void main(String[] args) throws IOException
{
    try
    {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        java.util.Date utilDate = format.parse("0030-04-07");
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
        Calendar cal = Calendar.getInstance();
        cal.setTime(utilDate);
        cal.add(Calendar.DAY_OF_MONTH, -(2016-1));
        System.out.println(cal.get(Calendar.YEAR));
        System.out.println(cal.get(Calendar.MONTH));
        System.out.println(cal.get(Calendar.DAY_OF_MONTH));
        System.out.println(cal.get(Calendar.HOUR));
        System.out.println(cal.get(Calendar.MINUTE));
        System.out.println(cal.get(Calendar.SECOND));
        Date time = cal.getTime();
        System.err.println(time);
        cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.YEAR));
        cal.set(Calendar.YEAR, 2016);
        time = cal.getTime();
        System.err.println(sqlDate);
        System.out.println(time);


    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

}

因此,要获得正确的日期,可以像这样使用
LocalDate

DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy / MM / dd");
LocalDate ld = LocalDate.now();    
System.out.println("Current date - " + df.format(ld));

有关java中日期和时间的更多信息,请参阅上的此java程序。

恐怕您的年份在插入表之前已被截断。在这种情况下,可能无法重建原始值。您可能需要手动替换坏日期。没有截断年的问题,因为我会考虑它2016,所以我能检索月和日期吗?也许……尝试清理数据,如果你可以看看这个:试着用另一种方式。我的意思是
format.format()
而不是
format.parse()
来获取原始日期。但我担心它可能不起作用,因为它很复杂,因为您也使用了sql Date。