Форум: "Начинающим";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
ВнизРазница между датами Найти похожие ветки
← →
korneley © (2007-11-09 15:03) [120]
> далее 31>30, но что мы видим??? 0.1.0 = 0.1.0 !!!
Да, но месяц-то и там и там один прошел. Так чему удивляться?
← →
korneley © (2007-11-09 15:05) [121]
> А Вас я очень прошу, пожалуйста, хватит флудить
Пошел стену искать, засим замолкаю....
← →
Anatoly Podgoretsky © (2007-11-09 15:18) [122]> korneley (09.11.2007 14:53:57) [117]
Но это нормальный путь, когда документально оформляются бизнес правила.
Например я встречал места, где утверждено, что в месяце 30, 30.5, 31 день, в основном 30 дней в месяце и 365 или 365.25 в году
А без этого вы будете друг другу бить морды и обвинять друг друга. В большинстве места не мудрят а измеряют в днях
← →
SergeyIT © (2007-11-09 15:26) [123]
> Johnmen © (09.11.07 14:53) [118]
>
> Вы что, мой вопрос не поняли? Поясняю - почему у Вас разница
> дат для примера [106] одинаковая, хотя любой, знающий вычитание,
> человек видит, что она разная?
Разве разная? - ровно 1 месяц получается.
Вот и korneley Вам указал на это.
Засим тоже умолкаю.
← →
Johnmen © (2007-11-09 15:34) [124]
> SergeyIT © (09.11.07 15:26) [123]
Дурковать многие умеют. Но у Вас это получается очень тонко - первое впечатление, что Вы тупой. Ан нет!
Засим тоже умолкаю.
И это правильно.
← →
Германн © (2007-11-09 15:53) [125]
> Засим тоже умолкаю.
> И это правильно.
>
Нет. Правильно будет за сим.
:)
← →
Джо © (2007-11-09 16:08) [126]> [125] Германн © (09.11.07 15:53)
>
> > Засим тоже умолкаю.
> > И это правильно.
> >
>
> Нет. Правильно будет за сим.
> :)
Нет, как-раз первоначальный вариант — правильный.
Но все это оффтоп, конечно.
← →
clickmaker © (2007-11-09 16:11) [127]
> Правильно будет за сим
Правильно будет: "Ну! За присутствующих здесь Сим!"
← →
Германн © (2007-11-09 16:19) [128]
> Джо © (09.11.07 16:08) [126]
Угу. Был не прав.
← →
Anatoly Podgoretsky © (2007-11-09 17:04) [129]> clickmaker (09.11.2007 16:11:07) [127]
"Ну! За присутствующих здесь Засим!"
← →
korneley © (2007-11-09 17:48) [130][126] - [129]
А ещё меня во флуде упрекали :) Но, тем не менее поддержу:" И за DIMM!"
← →
engine © (2007-11-09 18:07) [131]А в сутках 23, 24 или 25 часов? )))
← →
Anatoly Podgoretsky © (2007-11-09 19:08) [132]> korneley (09.11.2007 17:48:10) [130]
А ты чего хочешь то? Ветка давно уже флудерская, ее может стоит в Потрепаться кинуть. Если ветка не удаляется, то только лишь потому, что автор еще матом не ругается.
← →
Andy BitOff © (2007-11-10 02:29) [133]
> Anatoly Podgoretsky © (09.11.07 19:08) [132]
> Если ветка не удаляется, то только лишь потому,
> что автор еще матом не ругается.
Я на редкость спокойный и терпеливый, даже, не побоюсь этого слова - толерантный, меня трудно вывести из равновесия, да еще довести до такой степени, что бы я прилюдно стал ругаться матом.
Это вам, уважаемым, видно нечем заняться, всё флудите, да флудите, а некоторые (не будет тыкать в грудь пальцем) в это время работают ;)
А по поводу сабжа. Реализация возможна. Алгоритм проработан и испытан вручную, на кошках.
Спасибо SergeyIT за понимание и поддержку, он в одиночку сражался с флудерами до конца =)
Спасибо Johnmen, который честно пытался доказать, что реализация этой задачи не возможна. А спасибо именно за то, что направил на путь истинный, может быть сам этого и не осознавая. Именно из его постов было подчерпнуто зерно истины.
Ну, а остальным, за столь долгое обсуждение темы. =) Это же надо 132 поста!
> Johnmen © (09.11.07 13:22) [106]
> > SergeyIT © (09.11.07 12:57) [101]
> 1. 15.06.2007 - 15.07.2007 = 0.1.0
> 2. 15.07.2007 - 15.08.2007 = 0.1.0
> При этом
> 1. = 30 суток
> 2. = 31 сутки
> далее 31>30, но что мы видим??? 0.1.0 = 0.1.0 !!!
Всё правильно. В 6 месяце 30 дней, а в седьмом 31, в этом как раз и суть. И ответ правильный. Посчитайте пальчиком (не вычитанием) на календаре и вы увидите, что между этими датами ровно МЕСЯЦ или 30 и 31 день, соответственно. Вот где зерно истины. В предыдущем месяце.
← →
Германн © (2007-11-10 02:37) [134]
> Andy BitOff © (10.11.07 02:29) [133]
>
>
"И вечный бой. Покой нам только снится!"
← →
Andy BitOff © (2007-11-10 02:45) [135]
> Германн © (10.11.07 02:37) [134]
Флудеров я уже поблагодарил. Им можно больше не беспокоиться. Тем более, что ветка не в потрепаться.
← →
Германн © (2007-11-10 03:05) [136]
> Andy BitOff © (10.11.07 02:45) [135]
>
>
А чем ты лучше (выше) тех, кого
> уже поблагодарил.
?
Задачу не поставил. Это раз.
Обстановку не описАл. Это два.
И требовал решения!
АП прав. Ветка была изначально флудерская.
← →
Джо © (2007-11-10 03:08) [137]Кстати, кто-то соберется, наконец, дать формальное описание задачи?
А то пока наблюдаются многократные попытки написать незнамо что.
Как-то оно, ИМХО, утомительно.
← →
Andy BitOff © (2007-11-10 04:04) [138]Дано:
Два значения типа TDate.
Первое >= второму.
В частном случае, первое значение Now()
Задача:
Получить разницу между этими датами (количество полных дней, месяцев, лет) в строковую переменную в формате dd.mm.yy
Например:
Now() - Now() = 00.00.00
Now() - (IncDay(Now()), - 1) = 01.00.00
05.11.2007 - 05.11.2006 = 00.00.01
15.07.2007 - 15.06.2007 = 00.01.00
15.08.2007 - 15.07.2007 = 00.01.00
← →
Andy BitOff © (2007-11-10 04:14) [139]
> Германн © (10.11.07 03:05) [136]
> Задачу не поставил. Это раз.
> Обстановку не описАл. Это два.И требовал решения!
Задачу поставил. Согласен, что неказисто, но на то время у меня моск плавился. Но позже, несколькими постами ниже, её всё-таки выяснили.
Обстановку. Какую обстановку? Ну сидел на стуле за столом, лицом вперед. Передомной стоял ноутбук, в руках КПК - писал сюда пост. Вот и вся обстановка. А, еще народ вокруг какой-то был, но я думаю, это не столь существенно, или вам нужны их имена?
← →
Virgo_Style © (2007-11-10 09:27) [140]> Andy BitOff © (10.11.07 04:04) [138]
> (количество полных дней, месяцев, лет)
Если вдруг ты не заметил, то все обсуждение вертится вокруг вопроса "сколько дней в месяце и в году".
← →
Andy BitOff © (2007-11-10 11:36) [141]А я чего-то не понял...
Что нет функции, которая возвращает количество дней в месяце по году и месяцу?
← →
Andy BitOff © (2007-11-10 11:55) [142]Да я, собственно, как и писал выше, уже решил эту задачу. Правда в выходные я редко пишу, но алгоритм готов, если кому интересно, то могу вечером его набрасать (будет над чем пофлудить ;) ). А если кому код надо, то в понедельник.
← →
Anatoly Podgoretsky © (2007-11-10 12:04) [143]> Andy BitOff (10.11.2007 11:36:21) [141]
Ну вот опять, интервал это не точка на шкале времени. После получения интервала никакой год и месяц не существует.
Похоже что это длинное обсуждение пошло насмарку.
← →
Johnmen © (2007-11-10 21:51) [144]
> Andy BitOff © (10.11.07 02:29) [133]
> Всё правильно. В 6 месяце 30 дней, а в седьмом 31, в этом как раз и суть.
> И ответ правильный. Посчитайте пальчиком (не вычитанием) на календаре
> и вы увидите, что между этими датами ровно МЕСЯЦ или 30 и 31 день,
> соответственно. Вот где зерно истины. В предыдущем месяце.
Следуя этой логике между 31.01.2007 и 02.03.2007 ровно месяц, т.е. 31 сутки, ведь это "зерно истины, предыдущий месяц". Да?
Я думаю, что ты все равно не понял сути. Почитай последние посты дяди Толи (не флудерские), подумай...
← →
Anatoly Podgoretsky © (2007-11-10 22:28) [145]> Johnmen (10.11.2007 21:51:24) [144]
Ты скоро будешь писать - дедушки Толи :-)
А по сути, очень мало кто понимает, что такое время.
← →
Виталий Панасенко(дом) (2007-11-10 23:47) [146]
> Anatoly Podgoretsky © (10.11.07 22:28) [145]
Время и пространство когда-то были единой сущностью..А по сути вопроса.. фигня какая-то, а не вопрос.. Между датами можно получить РАЗНИЦУ В ДНЯХ..Но то, что просит автор... Я думаю DateDiff поможет...Из JEDI.. возвращает разницу между датами в днях, месяцах, годах
← →
Johnmen © (2007-11-11 00:00) [147]
> Anatoly Podgoretsky © (10.11.07 22:28) [145]
> Ты скоро будешь писать - дедушки Толи :-)
Ты станешь дедом? Серьезно?
> А по сути, очень мало кто понимает, что такое время.
Это точно. Но не понимая еще и пальцы гнут и неокрепшие души развращают... :)
Грустно...
← →
Anatoly Podgoretsky © (2007-11-11 00:05) [148]
> Время и пространство когда-то были единой сущностью.
Но потом появились программисты.
← →
Германн © (2007-11-11 00:15) [149]"Time is the Simplest Thing"
Copyright © 1961 Clifford D. Simak
← →
Progs (2007-11-11 07:21) [150]>>>Виталий Панасенко(дом) (10.11.07 23:47) [146]
Между датами можно получить РАЗНИЦУ В ДНЯХ.
Странная конечно ситуация.
Хорошо, а почему бы автору не разбить заранее кол-во дней по месяцам (что то типа констант некоторых, вдобавок проработав календарь :) проги же есть), а получив результат в виде разницы в количестве дней, преобразовать в тот вид который ему нужен и не ломать голову. Конечно грубовато, в одну строку код не получится.
Потому что, как посмотрю, спор уже идет по терминологии, сколько дней там, сколько здесь и т.д. и т.п.
С уважением.
← →
Sergey Masloff (2007-11-11 09:03) [151]Ну и флуда... Там за полчаса пишется
см. http://delphimaster.net/view/15-1194730016/ пост [101]
← →
ari_9 (2007-11-11 13:31) [152]я понимаю, как глупо влезать в такую тему на третий день флуда, но тем не менее. если автору нужен ответ в ОБЩЕГУМАНИТАРНОМ смысле, что-ли, то он, очевидно, может быть дан
ведь когда говорят, мне "двадцать восемь лет, один месяц и 16 дней" этот ответ тоже никак не может быть однозначно преобразован в дни (високосные годы и разные длины месяцев). но так иногда говорят
есть первая дата year1.month1.day1 и вторая, year2.month2.day2. тогда ответом будет yearХ.monthХ.dayХ, где :
yearХ - количество ПОЛНЫХ лет между year1.month1.day1 и year2.month2.day2
monthХ - количество ПОЛНЫХ месяцев между year1+yearХ.month1.day1 и year2.month2.day2
dayХ - количество дней между year1+yearХ.month1+monthХ.day1 и year2.month2.day2
← →
ari_9 (2007-11-11 13:49) [153]да, конечно в этом случае будет интересная ситуация, например, между 2006.08.31 и 2006.10.01, потому что полный месяц разницы - один, а даты (2006+0).(8+1).31 не существует (в сентябре 30 дней). но это просто означает, что необходимо определить поведение в этом случае - либо переносить дни в следующий месяц, либо всего обрезать число даты до максимального в полученном месяце
самый интересный вопрос - можно ли добиться таким образом свойста аддитивности алгоритма. то есть сумма разниц (дата 1 - дата 2) и (дата 2 - дата 3) будет равна (дата 1 - дата 3) для любых дат ? ... ясно, что обрезая числа месяца - нельзя. а перенося их в следующий, мне кажется - да
← →
Andy BitOff © (2007-11-12 10:21) [154]
> Johnmen © (10.11.07 21:51) [144]
> Следуя этой логике между
> 31.01.2007 и 02.03.2007 ровно месяц, т.е. 31 сутки, ведь это
> "зерно истины, предыдущий месяц". Да?Я думаю, что ты все
> равно не понял сути. Почитай последние посты дяди Толи (не
> флудерские), подумай...
> "зерно истины, предыдущий месяц". Да?
Да!
Я думаю, что ты все равно не понял сути. (c)Johnmen
31.01.2007 и 02.03.2007
Мне сейчас лень считать, но про 31 сутки ты не прав, предыдущий месяц 28 суток, вот и посчитай сколько будет.
Смотри, на данном примере. Берем общее количество дней между датами (нет дельфей под рукой, сколько там будет?) примерно 1+28+2, т.е. 31 (впрочем, как ты и заметил). Теперь получаем количество дней в 01.2007, их 31. Число текущего обрабатываемого месяца 31 (31.01.2007), увеличим некую переменную отвечающую за количество дней на результат их разницы (кол.д.тек.мес. - чис.обр.дня) = 0 дней + 1 день, чтобы текущим стал 02.2007 итого 1. Вычтем из общего числа дней эту некую переменную = 30. Поскольку январь кончился (и мы об этом знаем), то переходим к февралю. Получаем количество дней в 02.2007 = 28.
Увеличим ту некую переменную отвечающую за количество дней на результат их разницы (кол.д.тек.мес. - чис.обр.дня) = 27 дней + 1 день, чтобы текущим стал 03.2007 итого 1 + 28. Вычтем из общего числа дней эту некую переменную = 1. НО ПОСКОЛЬКУ МЫ ТОЛЬКО ЧТО ОБРАБОТАЛИ ЦЕЛЫЙ МЕСЯЦ, то увеличим некую переменную отвечающую за количество месяцев и обнулим ту, которая дней. Получаем количество дней в 03.2007 = 31, но это явно меньше чем у нас осталось от общего количества, за сим просто возьмем остаток дней 2 и еще +1 и прибавим их к той некой переменной, которая отвечала за дни = 3. Всё. Результат 03.01.00
P.S.
Это грубое описание алгоритма. Но в ОБЩЕМ всё понятно и правильно.
P.P.S.
К тому же я уже говорил, что ЭТО КОНЕЧНЫЙ СТАТИСТИЧЕСКИЙ РЕЗУЛЬТАТ и никакой дальнейшей обработки этой строки производиться не будет. За сим, мне по барабану, можно ли получить обратный результат и т.п.
P.P.P.S.
Этот текст я набирал сегодня в пять утра, так что возможна некоторая сумбурность. За это прошу прощения. Сейчас пришел с работы после бессонной ночи и собираюсь поспать.
← →
Anatoly Podgoretsky © (2007-11-12 11:53) [155]> Andy BitOff (12.11.2007 10:21:34) [154]
> так что возможна некоторая сумбурность.
Хм, я думал, что у слова некоторая немного другое значение, это не некоторая, а большая ее половина.
← →
Johnmen © (2007-11-12 14:39) [156]
> Andy BitOff © (12.11.07 10:21) [154]
Хорошо. Я правда не понял алгоритма.
Итак имеем
31.01.2007 - 02.03.2007 = 03.01.00
уменьшаем вычитаемое на 1 сутки
31.01.2007 - 01.03.2007 = 02.01.00
уменьшаем вычитаемое на 1 сутки
31.01.2007 - 28.02.2007 = 01.01.00 так, да?
уменьшаем вычитаемое на 1 сутки
31.01.2007 - 27.02.2007 = 00.01.00 так, да?
Продолжай думать...:)
← →
Andy BitOff © (2007-11-12 15:23) [157]
> Johnmen © (12.11.07 14:39) [156]
Попробуй прочитать еще раз.
Последние две строчки не правильно, потому что "зерно истины, предыдущий месяц", а там он уже январь, где 31 день.
← →
Johnmen © (2007-11-12 15:50) [158]
> Andy BitOff © (12.11.07 15:23) [157]
Т.е. при заданной начальной дате в непрерывной казалось бы разнице дат возникают разрывы!!!
Не существует разницы 01.01.00! А также 00.01.00!
Как же так?
← →
Andy BitOff © (2007-11-12 19:08) [159]Почему не существует? Очень даже существует.
01.01.2007 - 31.01.2007 = 00.01.00 потому, что в январе 31 день, что в свою очередь, является эквивалентом месяца (для января). Так же как и 01.02.2004 - 29.02.2004 = 00.01.00 и 01.02.2005 - 28.02.2005 = 00.01.00
В то время как:
01.01.2007 - 01.02.2007 = 01.01.00
а
01.02.2005 - 29.02.2005 вообще вернет ошибку еще до начала работы алгоритма, т.к. будет проверка валидности дат.
Основы алгоритма, это изначальное вычитание дат, дабы узнать количество дней их разделяющих. И далее, начиная от заданной меньшей даты вычитать из общего количества дней, количество дней в "текущем" месяце, который изначально совпадает с наименьшей датой, а в последствии передвигается вперед по календарю до конечной даты.
← →
Johnmen © (2007-11-12 19:38) [160]Вопрос
31.01.2007 - ??? = 00.01.00
ЗЫ
И в [156] и далее знак "-" считать не как вычитание, а как "с .. по ...". Впрочем, я думаю, все поняли.
Страницы: 1 2 3 4 5 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
Память: 0.86 MB
Время: 0.057 c