Object Date in Java

User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Object Date in Java

Post by Sabina »

Мне нужно вставить в проверку интервал между двумя датами включительно.

1) Все что я имею на данный момент

if ((checkDate.after(startDate) && (checkDate.before(endDate)))

дает только даты между startDate и endDate при этом исключая сами эти даты, а мне надо включительно.
Метод equals() не годится, он сравнивает до миллисекунд.
Можно преобразовать формат до 00:00:00, но тогда (см.вопрос 2)

2) Если определена константа
Date today = new Date();

как можно определить константы-даты tomorrow и yesterday?

Спасибо,
Сабина
User avatar
nastya12
Уже с Приветом
Posts: 2622
Joined: 17 Jun 2003 04:41
Location: Canada

Post by nastya12 »

Прибавляте очень небольшое значение к границам (несколько milliseconds)
Бродяга
Уже с Приветом
Posts: 16086
Joined: 22 Apr 2003 17:57
Location: Колыбель

Re: Object Date in Java

Post by Бродяга »

Sabina wrote:Мне нужно вставить в проверку интервал между двумя датами включительно.

1) Все что я имею на данный момент

if ((checkDate.after(startDate) && (checkDate.before(endDate)))

дает только даты между startDate и endDate при этом исключая сами эти даты, а мне надо включительно.
Метод equals() не годится, он сравнивает до миллисекунд.
Можно преобразовать формат до 00:00:00, но тогда (см.вопрос 2)

2) Если определена константа
Date today = new Date();

как можно определить константы-даты tomorrow и yesterday?

Спасибо,
Сабина

Что Вы конкретно хотите сравнить? День с днем? Или день и текущее время?
Бог создал людей разными, Линкольн дал людям свободу, а Кольт всех уравнял.
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

nastya12 wrote:Прибавляте очень небольшое значение к границам (несколько milliseconds)


Что-то не пойму что мне это даст? :oops:
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Object Date in Java

Post by Sabina »

Бродяга wrote:Что Вы конкретно хотите сравнить? День с днем? Или день и текущее время?


Мне нужны дни, но before и after тут тоже годятся, поскольку мне и надо после полуночи startDate UTC, только вот включая эту самую startDate.

По-моему я нашла как это дело решается, нужно использовать класс Calendar, а оттуда

public static Date yesterday (Date adate)
{java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(adate);
c.set(c.DAY_OF_MONTH, c.get(c.DAY_OF_MONTH)-1);
return c.getTime();;
}

Сорри за беспокойство. Вот всегда так, кажется ну никак не разрешишь проблему и как только отпостишь, сразу находится :D

Сабина
Last edited by Sabina on 10 Dec 2003 01:45, edited 1 time in total.
User avatar
nastya12
Уже с Приветом
Posts: 2622
Joined: 17 Jun 2003 04:41
Location: Canada

Post by nastya12 »

У Вас какое-то очень сложное solution. :wink: А что с чем надо сравнить? Current time с фиксированными датами? Где играют роль часовые пояса?
User avatar
nastya12
Уже с Приветом
Posts: 2622
Joined: 17 Jun 2003 04:41
Location: Canada

Post by nastya12 »

Грубо говоря Вам надо определить пришедшая дата - это сегодня или нет? ...расчлените ее на год, месяц, день и сравните, это легко in java
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

nastya12 wrote:У Вас какое-то очень сложное solution. :wink:


Может я объяснила сложно, а задача самая простая и типичная. Нужны данные за период startDate-endDate, включительно, где dates - это java.util.Date. и нужно написать if statement для отбора этих самых дат.

Скажем для чисел все просто if ((y>=a)&&(y<=b))

Как бы вы написали такое условие для джава дат?

Сабина
User avatar
nastya12
Уже с Приветом
Posts: 2622
Joined: 17 Jun 2003 04:41
Location: Canada

Post by nastya12 »

Можно вычесть один день из левой границы и прибавить один день к правой.

a <= x <= b эквивалентно a - 1 < x < b + 1 в целых числах
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

nastya12 wrote:Можно вычесть один день из левой границы и прибавить один день к правой.

a <= x <= b эквивалентно a - 1 < x < b + 1 в целых числах


Как вычесть этот самый день без использования класса Calendar? Ведь в датах из методов есть только after и before?

Сабина
User avatar
nastya12
Уже с Приветом
Posts: 2622
Joined: 17 Jun 2003 04:41
Location: Canada

Post by nastya12 »

Как раз с Calendar и нужно. -> Calendar.roll(int field, int amount)
"вручную" вычитать прибавять 1 нельзя, потому что нужно смотреть какое число и какой месяц.

Вам нужен GregorianCalendar. Class Date видимо надо трогать по минимму. before() , after() тоже брать из classа GregorianCalendar, а не из Date
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

nastya12 wrote:Как раз с Calendar и нужно.


Так в том и был вопрос :D

nastya12 wrote:Вам нужен GregorianCalendar. Class Date видимо надо трогать по минимму. before() , after() тоже брать из classа GregorianCalendar, а не из Date


А зачем Gregorian? У меня BC дат нет?
А чем before и after из java.util.date не годятся?

Сабина
Бродяга
Уже с Приветом
Posts: 16086
Joined: 22 Apr 2003 17:57
Location: Колыбель

Post by Бродяга »

Sabina wrote:
nastya12 wrote:У Вас какое-то очень сложное solution. :wink:


Может я объяснила сложно, а задача самая простая и типичная. Нужны данные за период startDate-endDate, включительно, где dates - это java.util.Date. и нужно написать if statement для отбора этих самых дат.

Скажем для чисел все просто if ((y>=a)&&(y<=b))

Как бы вы написали такое условие для джава дат?

Сабина

а почему бы Date не перевести в long и сравнить их? Что-то я никак не пойму в чём проблема :pain1:
Бог создал людей разными, Линкольн дал людям свободу, а Кольт всех уравнял.
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Бродяга wrote:а почему бы Date не перевести в long и сравнить их? Что-то я никак не пойму в чём проблема :pain1:


А почему же вы раньше молчали :) ?
Да, с long тоже можно, но по-моему с calendar решение получилось как бы это сказать, красивее что ли:

Пишем два метода beforeStartDate(Date startDate) и afterEndDate(Date endDate)

и потом пишем if

Code: Select all

if ((checkDate.after(beforeStartDate(startDate))) && (checkDate.before(afterEndDate(endDate))))


А с long, пришлось бы сначала преобразовывать endDate и startDate и текущую дату в long, потом сравнивать, потом текущую обратно в тот вид, в котором она нужна в приложении.

Сабина
User avatar
nastya12
Уже с Приветом
Posts: 2622
Joined: 17 Jun 2003 04:41
Location: Canada

Post by nastya12 »

Вы можете либо перевести все в milliseconds и сравнивать (тогда границы надо поставить на полночь), либо использовать Calendar class. В каком формате у Вас даны эти границы? before(), after() можно взять из Date, но как Вы будете прибавлять, вычитать 1 без использования Calendar.roll()?

GregorianCalendar is the only implementing subclass (сам Calendar - abstract class)

Бродяга, видимо проблема просто с переводом в long (miliseconds), что Sabina не знает значения границы в miliseconds. Set methods у Date deprecated

Return to “Вопросы и новости IT”