![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
В зависимости от начальной и конечной даты необходимо сгенерить значения с заданным периодом. Можно ли это реализовать универсально ?
Схематично:
Тоесть весь прикол в том, что я могу запросить генерацию : 1. По часам 2. По дням 3. По неделям 4. По месяцам 5. По годам Спасибо |
|||
|
||||
| Nobody |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 25.8.2003 Где: Россия, Москва Репутация: 4 Всего: 16 |
Представить дату в виде миллисекунд с начала эпохи и вычесть?
-------------------- |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Как я понял надо что-то вроде:
Это сообщение отредактировал(а) LSD - 14.1.2005, 00:50 -------------------- 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. |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
1. А где Date и ArrayList находятся ?
2. Что-то вроде этого, но немного не так Я задаю начало, конец и период. К примеру - 1 января 1990 по 1 января 2000 а) период - год. Значит должо получиться 1990, 1991, ..., 2000 б) период - месяц. январь 1990, февраль 1990, ... декабрь 2000 в) период - день. 1 января 1990, 2 января 1990, ... 1 января 2000 г) период - час. 1 января 1990 00.00, ..., 31 декабря 1999 24.00 и т.д. Можно ли это реализовать с помощью одной функции ? Это сообщение отредактировал(а) zss - 14.1.2005, 10:07 |
|||
|
||||
| Nobody |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 25.8.2003 Где: Россия, Москва Репутация: 4 Всего: 16 |
LSD всё написал. Посчитай просто сколько миллисекунд в дне/месяце/году и вперёд.
-------------------- |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Не понял вопроса.
Пункты а и б не совсем интервал, т.к. их длительность варьируется. Но можно и такую штуку сделать. Есть правда парочка тонких моментов, что делать например если начальная дата 31.01.2000 а интервал 1 месяц? Как напишу запостю. -------------------- 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. |
||||
|
|||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Вот приблизительный код:
В массиве fields передаются константы обозначающие поля которые надо увеличивать (см java.util.Calendar), а в массиве fields, то на сколько их надо увеличивать. Т.е. для: период - год и 2 месяца. Делаем так:
-------------------- 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. |
||||
|
|||||
| igon |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 1 Всего: 21 |
Уппс, немного опоздал, и все же...
Не так все просто - в феврале меньше миллисекунд, чем в январе, а в високосном 2000 - больше, чем в обычном 2001 Я бы предложил модифицировать вариант LSD (первоначальный!!!) 1. В цикле к начальной дате прибавлять не period, а минимальный интервал, в данном случае количество миллисекунд в часе. 2. Из полученной даты извлекать подстроку, соответствующую period и добавлять ее в структуру типа список, ДОПУСКАЮЩУЮ ТОЛЬКО УНИКАЛЬНЫЕ значения (Set, SortedSet?). 3. Список возвратить Т.к. количество миллисекунд варьирует только для годов и месяцев, приращение в цикле, для ускорения, можно делать по дням и даже по неделям -------------------- Хотите поговорить об этом? |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
надо даже часам и минутам LSD, спасибо, твой код попробую обкатать - может что и придумаю |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Я не пояснил, внутри цикла надо оставить или calendar.add(fields[i], amounts[i]); или calendar.roll(fields[i], amounts[i]);.
Если оставить calendar.add(fields[i], amounts[i]);, то в том примере следующая дата будет не в феврале а в марте, а если оставить calendar.roll(fields[i], amounts[i]);, то следующая дата будет 28 февраля. -------------------- 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. |
|||
|
||||
| igon |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 1 Всего: 21 |
Вот пример РАБОТАЮЩЕГО (отнюдь не оптимального!!!) кода на основе первоначального варианта LSD.
Реализовано только для "По дням" и "По месяцам", выдает в алфавитном порядке, но все дни (месяцы) и в нужном (ИМХО) формате, начиная с текущей даты+3 месяца. Иная сортировка - это уже детали Для минут и часов нужно просто другую маску в formatter
Это сообщение отредактировал(а) igon - 15.1.2005, 02:36 -------------------- Хотите поговорить об этом? |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
Спасибо - помогло
А в каком формате их лучше хранить ? Я храню в файле в виде строки, но много недостатков: 1. Частые преобразования String->long->Date и Date->long->String 2. Если просто читать файл, то дата непонятна Это сообщение отредактировал(а) zss - 28.1.2005, 12:13 |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Оставь строкой - затраты на чтение файла гораздо выше,чем затраты на преобразование.
Для скорости можешь сделать класс, который будет хранить дату во всех трех представлениях. А записывая/считывай только строку. |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
Так строка у меня примерно такая
61062670800000 не очень то понятно что это за дата А если использовать Date.toString, то обратно не перевести |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
А может лучше хранить в виде лонг (миллисекунды). Оттуда легко созать объект Date. А если часто работаешь с одной и той же датой, то тогда быстрее всего сделать как Антон предложил; памяти немного больше съешь но зато эффективнее.
-------------------- |
|||
|
||||
![]()
|
| Правила форума "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. |