![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Kizja |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Привет, кто-нибудь может предложить более короткий вариант нахождения возраста по дате рождения, чем следующий:
Если рассматривать этот вариант, то кроме всего прочего ещё хотел бы избавиться от захардкоденного "1970" и заменить его на что-то более вразумительное, но не убогое типа создание даты и вытаскивания из неё года:
или как-то так Хотя он вообще уже deprecated. Может вообще уже такая функция где-то есть, а я сейчас изобретаю велосипед? |
||||
|
|||||
| MaxPayneC |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 18.2.2006 Репутация: 5 Всего: 9 |
Моя реализация:
|
|||
|
||||
| Kizja |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
MaxPayneC, круто, этот вариант очень понравился, а главное ничего лишнего... От тебя всегда поступают хорошие решения - помню ты про сортировку мапы тоже хороший вариант подкинул
Думаю лучшего решения в данном случае уже никто предложить не сможет... |
|||
|
||||
| ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 4 Всего: 28 |
А если так?
Тут есть проблема с високосными годами... Но ИМХО это не даст ошибку - все равно при округлении это будет нивелировано. -------------------- Aut viam inveniam aut faciam |
|||
|
||||
| intr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 18.12.2005 Репутация: 1 Всего: 2 |
А так еще красивее
Но тогда надо использовать дополнительную библиотеку joda-time - http://joda-time.sourceforge.net/ --------------------
Исследователь бытия и по совместительству Java-developer |
|||
|
||||
| Kizja |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
ivanovpv, да, выглядит покороче того варианта, что привёл MaxPayneC, но считает в данный момент не совсем правильно - мой возраст например определил в 557 лет (это хоть и всего на пару лет, но больше, чем на самом деле
intr, да, этот вариант тоже хорош своей краткостью, но я бы наверное к нему бы прибегнул именно в том случае, если эта библиотека уже подключена, поскольку в противном случае из-за 1-го маленького метода подключать всю библиотеку не хочется - т.е. это очевидный минус в данном случае... В варианте MaxPayneC я вобщем-то не вижу минусов, поэтому лично мне по прежнему больше всего по душе именно тот вариант... Это сообщение отредактировал(а) Kizja - 23.3.2010, 18:23 |
|||
|
||||
| MaxPayneC |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 18.2.2006 Репутация: 5 Всего: 9 |
Вариант, который предложил ivanovpv, возможно бажит, если человек родился до 1970 года или если сейчас больше, чем максимальное юникс-время... 2030й год, что ли... не помню точно, когда количество секунд перестанет в 32 бита помещаться.
|
|||
|
||||
| Kizja |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Я не подился до 1970 года, но сейчас бажит всё равно
|
|||
|
||||
| jk1 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Бажит по двум причинам:
1) Переполнение типа, вместо
нужно
2) ошибка в приведении типа, вместо
нужно
-------------------- Opinions are like assholes — everybody has one |
||||||||
|
|||||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Даст на пограничных днях (например день следующий за днем рождения). -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| intr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 18.12.2005 Репутация: 1 Всего: 2 |
Кстати, вариант предложенный @MaxPayneC может дать ошибку если время указывается с точностью до миллисекунды
А joda-time крайне полезная библиотека, да и у нее нет зависимостей на другие либы --------------------
Исследователь бытия и по совместительству Java-developer |
|||
|
||||
| Kizja |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Я думаю "с точностью до миллисекунды" ещё ни один человек свой день рождения не отмечал
|
|||
|
||||
| intr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 18.12.2005 Репутация: 1 Всего: 2 |
Та же проблема с минутами, секундами и часами --------------------
Исследователь бытия и по совместительству Java-developer |
|||
|
||||
| ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 4 Всего: 28 |
Да, согласен - так и надо а вот тут не согласен, операция cast имеет наименьший приоритет, так что кастироваться будет после выполнения всех операций с правой стороны Вообще я писал на коленках и не ставил перед собой задачу написания абсолютно точного кода, а озвучил только саму идею. Код MaxPayneC безусловно самый правильный, мне он тоже нравится, хотя привлечение тяжелого класса Calendar немного напрягает - в этом смысле он мало чем отличается от кода intr где вместо класса Calendar используется библиотека joda-time. Решать какой код лучше - не моя задача. Если бы решал, я - посмотрел сначала на требования: если код для какого-нибудь телефона или кард-аппарата, остался бы с кодом ivanovpv, а если обычное консольно-вебное приложение - тут и думать не надо - код MaxPayneC - самое оно. -------------------- Aut viam inveniam aut faciam |
|||
|
||||
| jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Это не так, операция приведения типа имеет довольно высокий приоритет, выше только ++, --, ~ и !. Чтобы не быть голословным, приведу пример:
-------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
| ivanovpv |
|
|||
![]() Варвар ![]() ![]() Профиль Группа: Участник Сообщений: 639 Регистрация: 26.1.2005 Где: Москва Репутация: 4 Всего: 28 |
Каюсь был неправ... -------------------- Aut viam inveniam aut faciam |
|||
|
||||
![]()
|
| Правила форума "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. |