![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Swatch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 453 Регистрация: 2.7.2007 Репутация: нет Всего: 1 |
Добрый день.
Немного запуталась с датами. Помогите, пожалуйста. Есть строка, в которой записана дата заведения данных, например, следующая: 01/05/2008 00:00. Надо проверить условие, чтобы эта дата была не раньше месяца назад, т.е. текущий месяц-1. Но дата в поле String. Я знаю, по шагам, что делать... но что-то туплю. Помогите с кодом, пожалуйста... |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
А дальше смотреть класс Calendar и все, что у него есть. Читать доку все-таки надо иногда. |
|||
|
||||
| vdim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 19.4.2008 Репутация: нет Всего: нет |
Я бы сделал так:
|
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Хорошо использовать cal.getTime().before(..)
Обычно нагляднее |
|||
|
||||
| Swatch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 453 Регистрация: 2.7.2007 Репутация: нет Всего: 1 |
Так... это ведь получается, что если я ввела дату 25/05/2008, то у меня будет сравниваться с 25/04/2008... а мне нужно, чтобы сравнивалось с 01/04/2008... вот это вызвало у меня затруднения...
Добавлено через 4 минуты и 12 секунд To AntonSaburov : а разве cal.getTime().before(..) возвращает не просто результат сравнения, раньше ли была дата или нет? а мне нужно только, чтобы на месяц раньше была... |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Ну если ровно на месяц - тогд асравнивать конечно надо не так. Я просто на последнюю ремарку написал -
там-то сравнение на больше-меньше. |
|||
|
||||
| Swatch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 453 Регистрация: 2.7.2007 Репутация: нет Всего: 1 |
и еще, после вот этой строчки
у меня cal.getTime() возвращает текущую дату, но прошлого года.... :( Добавлено через 1 минуту и 3 секунды ой, мой косяк... смотрю не туда |
|||
|
||||
| vdim |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 19.4.2008 Репутация: нет Всего: нет |
Я не понял насчет 1 числа, думал через месяц надо. Тогда замени
на
Это сообщение отредактировал(а) vdim - 21.1.2009, 16:58 |
||||
|
|||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Не надо забывать, что не в каждом месяце есть, например, 31 число. Если в календаре волюнтаристки добавить\убавить 1 в поле месяца, то поле числа не изменится. И может получиться несуществующая дата. Поэтому "месяц назад" лучше интерпретировать как 4 недели назад или как-то по другому в зависимости от контекста. Это сообщение отредактировал(а) COVD - 21.1.2009, 17:06 |
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
||||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
я использовал метод, кажется, roll и у меня такая проблема возникала. Что меня неприятно удивило. Но с другой стороны, а как определить дату "месяц назад" от сегодня, если количество дней в месяцах разное? Не хотелось бы погружаться, но если я не прав, значит, ошибся. |
|||
|
||||
| ivg |
|
||||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
Код не вспомните?
Да просто же - если в целевом месяце дней меньше чем текущее число в календаре, то вместе с установкой месяца устанавливается и число на макс. кол-во дней в целевом месяце. Например для 31.03.2009
|
||||||
|
|||||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Наверное, проблема была именно в том, что я использовал roll, а надо было add. В roll , в отличии от add, меняется только само поле. Они в документации приводят пример, что если календарь стоит на дате December 31, 1999 и сделать roll(Calendar.MONTH, true), т.е. на месяц вперед, то получим January 31, 1999 . т.е. год переводить в этом случае никто и не обещал. А в методе add старшее поле (год), очевидно, будет скорректировано. Значит, я просто плохо разобрался тогда с документацией.
Логично. Спасибо. Это сообщение отредактировал(а) COVD - 21.1.2009, 19:15 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |