2017-06-16 1 views
1

Ich habe eine Anwendung, die Datum in eine Datenbank einfügt. Als ich die Einträge mit Eclipse-Neon im Datenquellen-Explorer geöffnet habe, habe ich festgestellt, dass die Jahre im Datum den Wert haben (Beispiel: 3916-10-05). Zu wissen, dass die Variablen vom Typ java.util.date sind und dass die Spalte in der Datenbank vom Typ DATE ist.Java.util.date Jahr größer als dreitausend

+1

Können Sie den Code teilen, die die Java Daten auffüllt? –

+0

Es ist wahrscheinlich das gleiche Problem wie in [diese Frage: java.util.Date und getYear()] (https://stackoverflow.com/questions/9243578/java-util-date-and-getyear), nur von der gegenüberliegende Seite. –

Antwort

2

Ich denke, dieses Beispiel wird Ihnen helfen, zu verstehen, was Ihre eigentliche Problem ist (try it):

import java.util.Date; 
import java.io.*; 

class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     Date date = new Date(1475625600000L); //2016-10-05 
     int year = date.getYear(); 
     System.out.println("Year from epoch: " + date.getYear()); 
     date.setYear(2016); 
     System.out.println("Year from setYear() " + date.getYear()); 
     System.out.println("Full date: " + date.toString()); 
    } 
} 

Dieser Druck wird

Year from epoch: 116 
Year from setYear() 2016 
Full date: Thu Oct 05 00:00:00 GMT 3916 

java.util.Date ist ein bisschen komisch, wenn es darum geht, Umgang mit Jahren in Daten. Es verwendet einen Offset von 1900, wenn Sie Jahre festlegen und subtrahieren, wenn Sie Jahre von Daten erhalten.

Vom documentation:

getYear() 
Deprecated. 
As of JDK version 1.1, replaced by Calendar.get(Calendar.YEAR) - 1900. 

setYear(int year) 
Deprecated. 
As of JDK version 1.1, replaced by Calendar.set(Calendar.YEAR, year + 1900). 

Wenn Sie versuchen, ein Jahr als 4-stellige Form einstellen, erhalten Sie neuesten Stand zu bringen, nachdem 3900.

+0

Sehr wahrscheinlich Hypothese, stimme ich zu. Die wirkliche und gute Lösung wäre, die veralteten Klassen "Date" und "Calendar" komplett zu verwerfen und stattdessen die modernen 'java.time' API-Klassen zu verwenden, wie zum Beispiel' LocalDate'. Mit einem ausreichend neuen JDBC-Treiber kann man diese direkt in die Datenbank einfügen. –