Object Date in Java
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Object Date in Java
Мне нужно вставить в проверку интервал между двумя датами включительно.
1) Все что я имею на данный момент
if ((checkDate.after(startDate) && (checkDate.before(endDate)))
дает только даты между startDate и endDate при этом исключая сами эти даты, а мне надо включительно.
Метод equals() не годится, он сравнивает до миллисекунд.
Можно преобразовать формат до 00:00:00, но тогда (см.вопрос 2)
2) Если определена константа
Date today = new Date();
как можно определить константы-даты tomorrow и yesterday?
Спасибо,
Сабина
1) Все что я имею на данный момент
if ((checkDate.after(startDate) && (checkDate.before(endDate)))
дает только даты между startDate и endDate при этом исключая сами эти даты, а мне надо включительно.
Метод equals() не годится, он сравнивает до миллисекунд.
Можно преобразовать формат до 00:00:00, но тогда (см.вопрос 2)
2) Если определена константа
Date today = new Date();
как можно определить константы-даты tomorrow и yesterday?
Спасибо,
Сабина
-
- Уже с Приветом
- Posts: 2622
- Joined: 17 Jun 2003 04:41
- Location: Canada
-
- Уже с Приветом
- Posts: 16086
- Joined: 22 Apr 2003 17:57
- Location: Колыбель
Re: Object Date in Java
Sabina wrote:Мне нужно вставить в проверку интервал между двумя датами включительно.
1) Все что я имею на данный момент
if ((checkDate.after(startDate) && (checkDate.before(endDate)))
дает только даты между startDate и endDate при этом исключая сами эти даты, а мне надо включительно.
Метод equals() не годится, он сравнивает до миллисекунд.
Можно преобразовать формат до 00:00:00, но тогда (см.вопрос 2)
2) Если определена константа
Date today = new Date();
как можно определить константы-даты tomorrow и yesterday?
Спасибо,
Сабина
Что Вы конкретно хотите сравнить? День с днем? Или день и текущее время?
Бог создал людей разными, Линкольн дал людям свободу, а Кольт всех уравнял.
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: Object Date in Java
Бродяга 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();;
}
Сорри за беспокойство. Вот всегда так, кажется ну никак не разрешишь проблему и как только отпостишь, сразу находится
![Very Happy :D](./images/smilies/icon_biggrin.gif)
Сабина
Last edited by Sabina on 10 Dec 2003 01:45, edited 1 time in total.
-
- Уже с Приветом
- Posts: 2622
- Joined: 17 Jun 2003 04:41
- Location: Canada
-
- Уже с Приветом
- Posts: 2622
- Joined: 17 Jun 2003 04:41
- Location: Canada
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
nastya12 wrote:У Вас какое-то очень сложное solution.![]()
Может я объяснила сложно, а задача самая простая и типичная. Нужны данные за период startDate-endDate, включительно, где dates - это java.util.Date. и нужно написать if statement для отбора этих самых дат.
Скажем для чисел все просто if ((y>=a)&&(y<=b))
Как бы вы написали такое условие для джава дат?
Сабина
-
- Уже с Приветом
- Posts: 2622
- Joined: 17 Jun 2003 04:41
- Location: Canada
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 2622
- Joined: 17 Jun 2003 04:41
- Location: Canada
Как раз с Calendar и нужно. -> Calendar.roll(int field, int amount)
"вручную" вычитать прибавять 1 нельзя, потому что нужно смотреть какое число и какой месяц.
Вам нужен GregorianCalendar. Class Date видимо надо трогать по минимму. before() , after() тоже брать из classа GregorianCalendar, а не из Date
"вручную" вычитать прибавять 1 нельзя, потому что нужно смотреть какое число и какой месяц.
Вам нужен GregorianCalendar. Class Date видимо надо трогать по минимму. before() , after() тоже брать из classа GregorianCalendar, а не из Date
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
nastya12 wrote:Как раз с Calendar и нужно.
Так в том и был вопрос
![Very Happy :D](./images/smilies/icon_biggrin.gif)
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: Колыбель
Sabina wrote:nastya12 wrote:У Вас какое-то очень сложное solution.![]()
Может я объяснила сложно, а задача самая простая и типичная. Нужны данные за период startDate-endDate, включительно, где dates - это java.util.Date. и нужно написать if statement для отбора этих самых дат.
Скажем для чисел все просто if ((y>=a)&&(y<=b))
Как бы вы написали такое условие для джава дат?
Сабина
а почему бы Date не перевести в long и сравнить их? Что-то я никак не пойму в чём проблема
![HBZ :pain1:](./images/smilies/pain25.gif)
Бог создал людей разными, Линкольн дал людям свободу, а Кольт всех уравнял.
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Бродяга wrote:а почему бы Date не перевести в long и сравнить их? Что-то я никак не пойму в чём проблема
А почему же вы раньше молчали
![Smile :)](./images/smilies/icon_smile.gif)
Да, с 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, потом сравнивать, потом текущую обратно в тот вид, в котором она нужна в приложении.
Сабина
-
- Уже с Приветом
- Posts: 2622
- Joined: 17 Jun 2003 04:41
- Location: Canada
Вы можете либо перевести все в 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
GregorianCalendar is the only implementing subclass (сам Calendar - abstract class)
Бродяга, видимо проблема просто с переводом в long (miliseconds), что Sabina не знает значения границы в miliseconds. Set methods у Date deprecated