Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2009, 08:13   #1
Bigtyoma
Пользователь
 
Аватар для Bigtyoma
 
Регистрация: 02.07.2008
Сообщений: 68
По умолчанию Как прибавить год к текущей дате

Здравствуйте, подскажите мне как сделать так, что если сегодняшняя дата равна дате в DateTimePicker, то к дате в DateTimePicker прибавляется год(т.е. сёдня 23 марта 2009, а в DayeTimePicker до сегодняшнего дня была дата 23 марта 2009, а сегодня стала та же дата тока 2010 года)
Bigtyoma вне форума Ответить с цитированием
Старый 23.03.2009, 08:21   #2
maladoy
delphi-ст!
Форумчанин
 
Аватар для maladoy
 
Регистрация: 02.01.2009
Сообщений: 825
По умолчанию

разбирай дату на день месяц год прибавляй к году 1 и собирай обратно!
вступлю в команду разработчиков ПО на Delphi
maladoy вне форума Ответить с цитированием
Старый 23.03.2009, 08:27   #3
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Или используй функцию IncYear из модуля DateUtils.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 23.03.2009, 08:32   #4
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

Код:
var
 Y, M, D: Word;
begin
  DecodeDate(Date, Y, M, D);
  DateTimePicker1.Date := EncodeDate(Y + 1, M, D);
end;
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Старый 23.03.2009, 10:53   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

не рекомендую пользоваться кодом от XuTpbIu
если дата 29.02.2008 — то получится Exception при попытке преобразовать EncodeDate...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.03.2009, 11:38   #6
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

А если так :
Код:
  dt := DateTimePickt.Date; // берем дату 
  dt := dt + 365;// прибавляем год
  Label1.Caption := DateToStr(dt);// смотрим что получилось
Здесь dt - переменная типа TDateTime
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 23.03.2009, 12:04   #7
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

Serge_Bliznykov
Хм... Вы правы. Тогда вопрос. А какая дата должна выводиться в случае если у нас действительно 29.02 сегодня?
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Старый 23.03.2009, 12:44   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Проще всего вычислить 01.03, а потом отнять единичку - тогда получите последнее число февраля без эксепшена...
mihali4 вне форума Ответить с цитированием
Старый 23.03.2009, 13:22   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ну лучше всего пользоваться готовой функцией IncYear, как верно посоветовал Andrei в #3 (хотя бы из JEDI - JvDateUtil.pas)

Эта функция сводится к вызову:
function IncDate(ADate: TDateTime; Days, Months, Years: Integer): TDateTime;

и корректно отрабатывает как увеличение, так и уменьшение на заданное число дней/месяцев/лет.

по годам там так (то, что связано с днями/месяцами опускаю):
Код:
  Inc(Year, Years);
...
  if Day > DaysPerMonth(Year, Month) then
    Day := DaysPerMonth(Year, Month);
ну и соответственно DaysPerMonth:
Код:
function IsLeapYear(AYear: Integer): Boolean;
begin
  Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or (AYear mod 400 = 0));
end;

function DaysPerMonth(AYear, AMonth: Integer): Integer;
const
  DaysInMonth: array [1..12] of Integer =
  (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
begin
  Result := DaysInMonth[AMonth];
  if (AMonth = 2) and IsLeapYear(AYear) then
    Inc(Result); { leap-year Feb is special }
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.03.2009, 19:05   #10
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

А зачем из JEDI? Модуль DateUtils как сказал Andrei и так есть
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан файл с различными датами.в дате число,месяц и год.Найти весеннюю дату. JiLiYa Паскаль, Turbo Pascal, PascalABC.NET 1 26.12.2008 15:20
Как прибавить привлекательности сделанной программе Arassir Свободное общение 5 09.11.2008 22:20
Как из TDBDateTimeEditEh получить отдельно день, месяц и год? HIC БД в Delphi 2 31.10.2008 17:24
Открытие Excel файла на текущей дате Million Microsoft Office Excel 2 04.09.2008 20:37
Открытие Excel файла на текущей дате Million Помощь студентам 1 04.09.2008 06:44