У меня есть приложение, которое вставляет дату в базу данных. Когда я открыл записи с помощью Eclipse neon в Data Source Explorer, я обнаружил, что годы в дате имеют значение "3916"
(пример: 3916-10-05). Зная, что переменные имеют тип java.util.date и что столбец в базе данных имеет тип DATE.
Java.util.date год больше трех тысяч
comment
Можете ли вы поделиться кодом, который заполняет даты Java?
- person Tim Biegeleisen   schedule 16.06.2017
comment
Вероятно, это та же проблема, что и в этом вопросе: java.util.Date и getYear(), только если смотреть с противоположной стороны.
- person Ole V.V.   schedule 17.06.2017
Ответы (1)
Я думаю, этот пример поможет вам понять, в чем ваша настоящая проблема (попробуйте):
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());
}
}
Это напечатает
Year from epoch: 116
Year from setYear() 2016
Full date: Thu Oct 05 00:00:00 GMT 3916
java.util.Date немного странный, когда дело доходит до обработки лет в датах. Он использует смещение 1900, когда вы устанавливаете годы и вычитаете его, когда вы получаете годы из дат.
Из документации:
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).
Если вы попытаетесь установить год в виде 4-значной формы, вы получите дату после 3900.
person
Laposhasú Acsa
schedule
16.06.2017
Очень вероятная гипотеза, согласен. Реальным и хорошим решением было бы полностью отказаться от устаревших классов
Date
и Calendar
и вместо них использовать современные классы API java.time
, например LocalDate
. С достаточно новым драйвером JDBC их можно вставить непосредственно в базу данных.
- person Ole V.V.; 17.06.2017