powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подскажите алгоритм для работы с датами
24 сообщений из 24, страница 1 из 1
Подскажите алгоритм для работы с датами
    #37831230
Lonely Morgan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Класс содержит установленные переменные
Код: java
1.
2.
3.
4.
5.
private int minutes;
private int hours;
private int days;
private int months;
private int years;


Переменные могут быть установлены некорректно - с превышением стандартного диапазона (например - days может равняться 312 дням). Нужно обработать данные значения, чтобы "лишние" величины перешли в переменные более высокого уровня.

Например: 312 дней, если 30 дней в месяце, то 30 * 10 месяцев + 12 дней. Т.е. к months прибавляется 10 месяцев, days становится равным 12.

В часе 60 минут.
В дне 24 часа.
В месяце 30 дней.
В году - 12 месяцев.
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37831251
Lonely Morgan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что я написал (Java):
Код: java
1.
2.
3.
4.
5.
6.
7.
minute = Math.abs(min) % 60;
hour = (int) (Math.abs(min) / 60) + Math.abs(h);
day = (int) (Math.abs(h) / 24) + Math.abs(d);
day %= 30;
month = (int) (Math.abs(d) / 30) + Math.abs(m);
year = (int) (Math.abs(month) / 12) + Math.abs(g);
month %= 12;


Но может возникнуть ситуация, когда сколько-то часов надо считать за 1 месяц. Например: 50 часов - это 1 месяц. Вот здесь я уже теряюсь.
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37831309
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonely MorganКласс содержит установленные переменные
Код: java
1.
2.
3.
4.
5.
private int minutes;
private int hours;
private int days;
private int months;
private int years;


Переменные могут быть установлены некорректно - с превышением стандартного диапазона (например - days может равняться 312 дням). Нужно обработать данные значения, чтобы "лишние" величины перешли в переменные более высокого уровня.

Например: 312 дней, если 30 дней в месяце, то 30 * 10 месяцев + 12 дней. Т.е. к months прибавляется 10 месяцев, days становится равным 12.

В часе 60 минут.
В дне 24 часа.
В месяце 30 дней.
В году - 12 месяцев.
1) На самом деле, как Вы знаете, в месяце не 30 дней.
2) В текущей постановке, задача тривиальна: на каждом шаге нормализуется текущая единица, лишнее уходит выше (значение года, как понимаю, уже может быть любым).
Для примера,
Код: plaintext
1.
2.
3.
4.
5.
{//На данный момент нормализованы секунды, минуты
  int normalizedHours = hours % 24;
  days += (hours - normalizedHours)/24;
  hours = normalizedHours;
}//На данный момент нормализованы секунды, минуты, часы
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37831470
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonely Morganможет возникнуть ситуация, когда сколько-то часов надо считать за 1 месяц. Например: 50 часов - это 1 месяц. Вот здесь я уже теряюсь.
Я тоже теряюсь... мне всегда казалось (если отбросить длины месяцев в 28-31 день), что в месяце 30*24=720 часов...
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37831471
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonely MorganКласс содержит установленные переменные
Код: java
1.
2.
3.
4.
5.
private int minutes;
private int hours;
private int days;
private int months;
private int years;


Переменные могут быть установлены некорректно - с превышением стандартного диапазона (например - days может равняться 312 дням). Нужно обработать данные значения, чтобы "лишние" величины перешли в переменные более высокого уровня.

Например: 312 дней, если 30 дней в месяце, то 30 * 10 месяцев + 12 дней. Т.е. к months прибавляется 10 месяцев, days становится равным 12.

В часе 60 минут.
В дне 24 часа.
В месяце 30 дней.
В году - 12 месяцев.Как уже сказали месяца разные по количеству дней. Без начальной точки отсчета нормализовать нельзя.
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37831510
Lonely Morgan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCcКак уже сказали месяца разные по количеству дней. Без начальной точки отсчета нормализовать нельзя.Как я уже сказал, в условии задачи положено, что в месяце 30 дней. Или некоторое количество часов.

Я же не календарь пишу, а решаю определенную задачу.
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37831530
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonely Morgan,

Если месяц бьётся сразу на часы, какое возможно значение "дней"?
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37831558
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonely MorganКак я уже сказал, в условии задачи положено, что в месяце 30 дней. Или некоторое количество часов.

Я же не календарь пишу, а решаю определенную задачу.ну, тогда алгоритм должен включать целочисленное деление и деление по модулю. imho.

ps. или целочисленное деление и вычитание.
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37831584
Lonely Morgan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такой кусок кода:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
month = min / minutesForMonth;
min -= minutesForMonth * month;
		
hour = (int) (Math.abs(min) / 60) + Math.abs(h);
min %= 60;
			
day = (int) (Math.abs(hour) / 24) + Math.abs(d);
hour %= 24;
		
month += (int) (Math.abs(day) / 30) + Math.abs(m);
day %= 30;
		
year = (int) (Math.abs(month) / 12) + Math.abs(y);
month %= 12;


minutesForMonth - число минут в месяце. Стандартное значение - 60 * 30 * 24

min, h, d, m, y - входные параметры. После запуска этого кода, значения нормализуются и во внутренние поля класса записываются правильные значения. Не могу понять, что тут не правильно.
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37831657
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonely Morgan,

1) Что там делает Math.abs()? Если числа положительные, он не нужен; если отрицательные - вреден.
2)
Код: java
1.
2.
month = min / minutesForMonth;
min -= minutesForMonth * month;

Зашибись. Было month=5, min=0. Стало month=0, min=0.
Есть такая полезная штука, называется отладчик.
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37854162
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Амига , ты ?
те не стыдно ?

бегом в избу-читальню, наверстывать знания в соответствии с должностью :

time_t mktime(struct tm *tm); if structure members are outside their valid
interval, they will be normalized (so that, for example, 40 October is
changed into 9 November);
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37855374
Lonely Morgan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРАмига , ты ?
те не стыдно ?

бегом в избу-читальню, наверстывать знания в соответствии с должностью :

time_t mktime(struct tm *tm); if structure members are outside their valid
interval, they will be normalized (so that, for example, 40 October is
changed into 9 November);
Я это все сделал через час-два после создания данного топега =)
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37855737
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonely Morgan, если это лаба - то нормально. Изучишь календарь и калькуляции. Но в продакшене так
не делают. Школьники кодят разницу между датами и эпично фейлят - забывают к примеру переход
на летнее время. Казалось - бы пустяк - 1 час но кому нахер надо потом краснеть, отчитываться
или не дай бог платить за потерянные деньги. Поэтому юзай стандартный конструктор DateTime
проверяй код ошибки или exception.
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37858005
Шогал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если вот так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
hour += (int) min/60;
min %= 60;
day += (int) hour/24;
hour %= 24;
month += (int) day/30;
day %= 30;
year += (int) month/12;
month %= 12;


Но это в случае, если нумеруется всё с нуля, если с одного - придётся вычитать единицу а потом после выполнения действий обратно прибалять.
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37858008
Шогал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разумеется, годится это только для сферической задачи в вакууме, в котором в месяцах по 30 дней, а часовых поясов не существует. И то цифры лучше всего заменить константами, вдруг в этом вакууме поменяется календарь
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37858956
Lonely Morgan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот поверьте мне, это самый что ни на есть энетрпрайз, весьма крупного масштаба и да, там сплошь и рядом пристутствуют подобные условия
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37858984
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonely Morgan,

Условия параметрически заданного, одинакового количества часов в месяце с отсутствующими днями?! Ничего себе энтерпрайз у кого-то...
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37859005
Lonely Morgan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbstractionLonely Morgan,

Условия параметрически заданного, одинакового количества часов в месяце с отсутствующими днями?! Ничего себе энтерпрайз у кого-то...ну вот так вот
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37859022
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Зачем самому производить нормализацию даты, если стандартный функционал (обычно) это и так умеет делать?
2. Откуда эти данные берутся в ненормализованном и раздробленном виде? Может проще привести обмен данными к адекватному виду, т.е. получать таймстамп, а не всю эту некорректную россыпь? Если это юзер вводит - ну так и скажи компу "Собери мне из этого таймстамп!" - он все сделает сам.

Классика велосипедостроения.
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37859045
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonely MorganВот поверьте мне, это самый что ни на есть энетрпрайз, весьма крупного масштаба и да, там сплошь и рядом пристутствуют подобные условиямда.
Исходя из возможности того, что в начальном состоянии во всех переменных есть какие-то значения, притом ненормализованные, то я вижу такой например подход:
1. все часы, дни, месяцы, года - переводятся в минуты, т.е. суммируются в переменную "минуты".
2. переменная "минуты" раскидывается обратно по часам, дням, месяцам, годам.
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37859111
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.Lonely MorganВот поверьте мне, это самый что ни на есть энетрпрайз, весьма крупного масштаба и да, там сплошь и рядом пристутствуют подобные условиямда.
Исходя из возможности того, что в начальном состоянии во всех переменных есть какие-то значения, притом ненормализованные, то я вижу такой например подход:
1. все часы, дни, месяцы, года - переводятся в минуты, т.е. суммируются в переменную "минуты".
2. переменная "минуты" раскидывается обратно по часам, дням, месяцам, годам.
И какая разница как котить мотоцикл - справа или слева? Он и так делает то же, только по-другому. И это есть не хорошо. Это как делать расчет зарплат на бумажке в столбик, отвлекаясь на новости по телеку.
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37861625
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.DragonИ какая разница как котить мотоцикл - справа или слева? Он и так делает то же, только по-другому. И это есть не хорошо. Это как делать расчет зарплат на бумажке в столбик, отвлекаясь на новости по телеку.Я просто принял как данное (и неизменяемое) условие - наличие
Код: sql
1.
2.
3.
4.
5.
private int minutes;
private int hours;
private int days;
private int months;
private int years;

12688367
При этом возможен "ненормализованный" случай
minutes = 1724;
hours = 0;
days = 3215;
months = 16;
years = 0;
При этом самое удобное (как мне кажется) - нормализация в два прохода, как я описал.

Никто не спорит, что использовать компонент для даты/времени лучше, но может быть, здесь нечто совсем другое?
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37861632
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.Никто не спорит, что использовать компонент для даты/времени лучше, но может быть, здесь нечто совсем другое?
Ну ок. Пишем свой велосипед.
Предлагаешь перевести все в минуты. Но ответов на вышепоставленные вопросы все-равно ведь не даешь.

Как правильно перевести в минуты 400 месяцев?
Как потом правильно минуты перевести в дату?

В этом собственно и вопрос топика.
Вот автор пишет: "В месяце 30 дней" - бред. И нужно это исправить хоть в алгоритме автора, хоть в твоем. Соответственно есть формулы, которые нужно нагуглить и реализовать. При том, что они реализованы, стандартны и каждому доступны, чтобы не плодить велосипедов с неправильными колесами и месяцами, в которых стабильно 30 дней =)
...
Рейтинг: 0 / 0
Подскажите алгоритм для работы с датами
    #37865319
Фотография AlexandrPlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если Java, то Calendar запрещено что ли использовать?

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

Или это поиск (если, как было замечено, это не учебные упражнения) каких-то иных способов работы с датами?
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подскажите алгоритм для работы с датами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]