2016-12-10 3 views
1

Я использую следующий код даты, чтобы отформатировать дату от 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 

Так работать над ней, пока кто-то помогает.

+0

Боюсь, что ваш год, возможно, был усечен, прежде чем вставлять его в свой стол. В этом случае восстановить исходное значение невозможно. Возможно, вы захотите заменить неудачные даты вручную. –

+0

Нет проблем с усеченным годом, потому что я буду считать его 2016, так что смогу ли я получить месяц и дату? –

+0

Возможно ... попробуйте очистить данные, если вы можете –

ответ

2

Я с оптимизмом смотрю на то, что предлагает решение. Это может быть непонятно для вас, но, поставив 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(); 
    } 

} 
0

Итак, чтобы получить правильную дату вы можете использовать LocalDate класс, как это,

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

Подробнее о дате и времени в java, см. Эту java-программу на datetime.