| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Вычитание дат |
| Автор: Janger 24.6.2013, 10:01 | ||
| Такая проблема.... У меня определённая дата записывается в текстовый документ, а потом, я хочу определить, сколько дней прошло с выбранной даты... Вот мой код... Подскажите, что я не так делаю...(
================================ text = 04.06.2014 date = 24.06.2013 (сегодняшняя дата) ================================ И естественно в Edit1 у меня ничего не отображается.... Подскажите пожалуйста(( |
| Автор: kakawkin 24.6.2013, 11:49 | ||
|
| Автор: Janger 24.6.2013, 13:24 | ||
| Жаль, что никто не помог.... Но я код выложу, вдруг, кому то будет полезно....
Добавлено через 9 минут и 45 секунд Тему в принципе можно закрыть... Я просто тут не давно, так что не знаю, может можно это как то самому сделать... |
| Автор: bems 24.6.2013, 13:35 |
| тут есть что-то лишнее |
| Автор: northener 24.6.2013, 13:47 |
Это слишком мягко сказано. |
| Автор: Sharhan 20.9.2013, 12:17 | ||||||
У меня тоже проблемы с датами.
В Edit6.Text вводим год. В ComboBox16.Items.Strings[ComboBox16.ItemIndex] находится номер месяца, список там от 01 до 12. В ComboBox15.Items.Strings[ComboBox15.ItemIndex] выбираем из списка число дня, список там от 1 до 31. Компилируется отлично, без всяких сообщений об ошибках. После нажатия кнопки в программе в форме появляется строка, в которой указывается название дня недели, всё правильно. Но при этом выводится поверх еще окно с надписью: "Invalid argument to date encode". Нажимаешь "ОК" и закрываешь окно. В принципе всё работает, но это всплывающее окно надоедает. Что я не так делаю? Можно как-то от этого окна избавиться? Пробовал изменить одну строку и даписать дату так:
Только программа опять расчитала все правильно и выдала тоже дополнительное окно с надписью: "Invalid argument to date encode". Операционная система: Система: Microsoft Windows XP Professional версия 2002 Service Pack 3 со всеми последними обновлениями. Программирую на Делфи 7. |
| Автор: Poseidon 20.9.2013, 12:54 |
| Вот жаль нет возможности проверить на D7, но что-то мне подсказывает, что Dateutils тут лишний, т.к. и http://docwiki.embarcadero.com/Libraries/XE2/en/System.SysUtils.EncodeDate, и http://docwiki.embarcadero.com/Libraries/XE2/en/System.SysUtils.LongDayNames, и http://docwiki.embarcadero.com/Libraries/XE2/en/System.SysUtils.DayOfWeek объявлены в SysUtils. Наверно все-таки в Dateutils есть своя EncodeDate, которая работает "не так". Хотя вот в http://docwiki.embarcadero.com/Libraries/XE3/en/System.DateUtils, но может в семерке еще была. PS. Конструкции вида ComboBox16.Items.Strings[ComboBox16.ItemIndex] безусловно красивы, но у ComboBox, так же как и у Edit, есть свойство Text. |
| Автор: Poseidon 20.9.2013, 15:04 |
| Локализуй и скинь сюда pas в таком случае, будем смотреть. Я вот пробую на D5 твой код, все работает без сообщений. |
| Автор: Akella 20.9.2013, 15:51 | ||
Вы пишите в высшей мере несознательно. Вы пишите просто так, совсем не думая, какой тип имеет date, что такое StrToDateTime и DateToStr И совет. Не называйте переменную именем date, назовите, например, _date или date1. А лучто что-то типа dtStart или dtEnd. Используйте кроме имёт ещё и префиксы/суффиксы. Почитайте обязательно об именовании переменных, объектов, компонент и т.д. Это связано с тем, что date содержит текущую дату. date - текущая дата. time - текущее время. now - текущие время и дата. Например, как показать текущую дату:
А у Вас получается, что Вы перегоняете дату сначала в строку, потом из строки опять в дату. Добавлено через 1 минуту и 25 секунд Вместо того, чтобы дать ему рыбу, ты лучше научи её ловить. Добавлено через 3 минуты и 30 секунд Да, и не читайте за обедом советских газет. |
| Автор: Poseidon 20.9.2013, 15:56 | ||
Я не вижу в коде
|
| Автор: Sharhan 21.9.2013, 13:31 | ||
Благодарю за подсказку. Был уверен, что ошибка кралась именно в этих строчках. Конечно можно было бы вложить исходник целиком, но кому надо разбираться в полуторатысячах строчек чужого кода... В общем, решил создать новый проект, где будет реализован только вывод названия дня недели. И к удивлению обнаружил, что тот же самый код в новой программе действительно нормально работает, без всяких сообщений. Залез в основной проект и удалил вообще эти строки из кода, чтоб было, как раньше. Но после компиляции и запуска создания отчета опять выслыло тоже самое сообщение об ошибке. А теперь, как говорит М. Задорнов, наберите воздуха в грудь. Ошибка была в самом конце исходника, там где я просисал обнуление всех данных. Если программу нужно использовать повторно, то старые данные в переменных будут сильно мешать и я их обнуляю. Так вот, я случайно прописал еще и обнуление переменной "myDate". Видимо не очень корректно это сделал или вообще этого нельзя было делать... После удаления этой строчки из очистки данных, всё заработало отлично. |
| Автор: kami 21.9.2013, 20:23 | ||
Ага. Зачем разбираться, что именно было написано не так - проще удалить и в следующих проектах опять натыкаться на эти же грабли. F7, F8, брейкпоинты и callstack придумали трусы... |