Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Сравнение лет в датах  [new]
Korcar
Member

Откуда:
Сообщений: 7884
И вот возникла потребность сравнить цифири лет в двух датах

DateTimeFormatter dtfrm = DateTimeFormatter.ofPattern("dd.MM.yyyy");
java.sql.Date dt1 = java.sql.Date.valuesOf(LocalDate.parse(request.getParameter("dt1").dtfrm));
java.sql.Date dt2 = java.sql.Date.valuesOf(LocalDate.parse(request.getParameter("dt2").dtfrm));

if (dt1.getYear()==dt2.getYear()) {

такой вариант не катит как устаревший,


зато канает вариант такой:
DateTimeFormatter dtfrm = DateTimeFormatter.ofPattern("dd.MM.yyyy");
java.sql.Date dt1 = java.sql.Date.valuesOf(LocalDate.parse(request.getParameter("dt1").dtfrm));
java.sql.Date dt2 = java.sql.Date.valuesOf(LocalDate.parse(request.getParameter("dt2").dtfrm));

Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1 = setTime(dt1);
cal2 = setTime(dt2);

if ((cal1.get(cal1.YEAR))==(cal2.get(cal2.YEAR))) {


теперь вопрос: нахрена вот городить такой огород с использованием дополнительного объекта и еще запихивать в его метод его же параметр (это вообще писец полный), чтобы сравнить части двух уже имеющихся дат? нафига вот сложности то такие, когда было всё просто? или я чего-то недопонял?
25 апр 19, 14:17    [21871667]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение лет в датах  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3256
Korcar
теперь вопрос: нахрена вот городить такой огород ...? или я чего-то недопонял?
Мы смешиваете старое api (java.util) и новое (java.time), так делать не нужно - они оба самодостаточны. У LocalDate есть метод getYer()
25 апр 19, 14:40    [21871710]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение лет в датах  [new]
забыл ник
Member

Откуда:
Сообщений: 2859
Андрей Панфилов
Korcar
теперь вопрос: нахрена вот городить такой огород ...? или я чего-то недопонял?
Мы смешиваете старое api (java.util) и новое (java.time), так делать не нужно - они оба самодостаточны. У LocalDate есть метод getYer()

у него вообще java.sql там, мне вот интересно где ТСы такие древние советы находят, на SO забанены чтоли?
LocalDate ldA = LocalDate.parse( inputA );
LocalDate ldB = LocalDate.parse( inputB );
long years= ChronoUnit.YEARS.between( ldA , ldB );
25 апр 19, 14:55    [21871737]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение лет в датах  [new]
chpasha
Member

Откуда:
Сообщений: 8046
забыл ник
где ТСы такие древние советы находят, на SO забанены чтоли?

он хотел сравнить даты на предмет одного и того же года, а не считать разницу в годах между двумя датами, но в главном ты прав Картинка с другого сайта.
25 апр 19, 15:44    [21871796]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение лет в датах  [new]
Korcar
Member

Откуда:
Сообщений: 7884
забыл ник
Андрей Панфилов
пропущено...
Мы смешиваете старое api (java.util) и новое (java.time), так делать не нужно - они оба самодостаточны. У LocalDate есть метод getYer()

у него вообще java.sql там, мне вот интересно где ТСы такие древние советы находят, на SO забанены чтоли?
LocalDate ldA = LocalDate.parse( inputA );
LocalDate ldB = LocalDate.parse( inputB );
long years= ChronoUnit.YEARS.between( ldA , ldB );

друг у друга списывает, а ты как думал?)

LocalDate не запихивается в PreparedStatement в качестве параметра запроса

PreparedStatement.setDate(1, ldA);

The method setDate(int, Date) in the type PreparedStatement is not applicable for the arguments (int, LocalDate)
26 апр 19, 09:31    [21872245]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение лет в датах  [new]
Korcar
Member

Откуда:
Сообщений: 7884
а если делать через setObject, то запрос отрабатывает, но условие по дате отсеивает все данные напрочь и те, что нужны и те, что не нужны
26 апр 19, 09:38    [21872251]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение лет в датах  [new]
Korcar
Member

Откуда:
Сообщений: 7884
забыл ник
Андрей Панфилов
пропущено...
Мы смешиваете старое api (java.util) и новое (java.time), так делать не нужно - они оба самодостаточны. У LocalDate есть метод getYer()

у него вообще java.sql там, мне вот интересно где ТСы такие древние советы находят, на SO забанены чтоли?
LocalDate ldA = LocalDate.parse( inputA );
LocalDate ldB = LocalDate.parse( inputB );
long years= ChronoUnit.YEARS.between( ldA , ldB );

кстати, парсинг даты из параметра реквеста, который текст, без формата не проходит
26 апр 19, 09:43    [21872256]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение лет в датах  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3256
Korcar
LocalDate не запихивается в PreparedStatement в качестве параметра запроса
Здрасьте... драйвер же должен понимать, что такое java.time и должен, соответственно, его конвертировать в нужное представление и обратно, вот у ораклового драйвера названия ojdbc4, ojdbc5,... ojdbc8 какбы намекают с какой версией жавы его следует использовать
26 апр 19, 10:01    [21872273]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение лет в датах  [new]
Korcar
Member

Откуда:
Сообщений: 7884
Андрей Панфилов
Korcar
LocalDate не запихивается в PreparedStatement в качестве параметра запроса
Здрасьте... драйвер же должен понимать, что такое java.time и должен, соответственно, его конвертировать в нужное представление и обратно, вот у ораклового драйвера названия ojdbc4, ojdbc5,... ojdbc8 какбы намекают с какой версией жавы его следует использовать

при чем тут драйвер? IDE пишет, что нифига такого метода нет, как setDate c параметром localdate

а с setObject не пойми как работало, а теперь стабильно просит указать sql type "Use setObject() with an explicit Types value to specify the type to use"
29 апр 19, 11:50    [21874114]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить