【问题标题】:Malformed dates entered in database数据库中输入的日期格式错误
【发布时间】:2016-12-10 13:17:30
【问题描述】:

我正在使用以下日期代码将日期从 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年,所以我可以检索月份和日期吗?
  • 也许...如果可以的话尝试清理数据
  • 尝试另一种方式。我的意思是 format.format() 而不是 format.parse() 以恢复原始日期。 .但恐怕它可能行不通,因为您也使用过 sql Date 存在复杂性。

标签: java date simpledateformat


【解决方案1】:

我对解决方案提供的内容持乐观态度。 您可能不清楚,但是通过将 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();
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    相关资源
    最近更新 更多