Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Работа с датой и временем (число в дату )


Автор: AJIeKcEu 2.8.2006, 06:39
Добрый день... у меня возникли вопросы при работе с датой : 
1)Как мне расчитать дни с учетом выходных и прибавить к дате. Например в четверг - вторник.. колличество дней с учетом выходных и праздников.. также по числам.. 
2) Вывод даты, с формата число->дата . Например: 38941.3664696875 -> 5.08.2006 

______________
 smile  smile 
Ну вот например: 
var 
dateNach:variant; 
dda4Iarray[1..100] of real; 
begin 
...... 
dateNach:=dateTimePicker1.Date; 
dda4[ch]:=dateNach; 
...... 
//ЗАтем вычисляем.. не буду все переменные описывать они типа реал 
okonch[i]:=(dda2[i]/dda1[i])+dda4[i]; 
// результат okonch[i]=38941.3664696875 
Теперь мне нужжно это число с плавающей запятой преобразовать в дату типа 06.08.2006 
тоесть в какуюнибуть переменную типа(стринг) записать в виде 06.08.2006, Через TimePicker не получается 

__________________________________________________ 
А вот с днями так: 
у меня допустим есть 2 даты 
1.08.2006 и 09.08.2006 
мне нужно посчитать колличество рабочих дней,без учета выходных ((Дата2-Дата1)- (Выходные дни+праздники)). 
Как можно узнать колличество выходных дней в заданный период? 



В заранее благодарен

Автор: Fedia 2.8.2006, 07:21
Цитата

четверг - вторник

Между четвергом и вторником знаешь сколько всего может быть smile

Цитата

Вывод даты, с формата число->дата . Например: 38941.3664696875 -> 5.08.2006 

FormatDateTime('dd.mm.yyyy', okonch[i]), только массив лучше организовывать не из элементов типа real, а из элементов типа TDateTime.

Автор: AJIeKcEu 2.8.2006, 07:48
to Fedia 
ok спасиб..ща попробую...
...

Ну мне нужно выделить выходные дни.. как можно сделать?) в выделенный период дат

Автор: comtat 2.8.2006, 08:01
Цитата(AJIeKcEu @  2.8.2006,  06:39 Найти цитируемый пост)
 38941.3664696875 -> 5.08.2006 

А не проще и правельнее ли работать с UnixTime ??

Автор: AJIeKcEu 2.8.2006, 08:31
to Fedia 
не у меня okonch[i] по формуле считается....
ну вроде получилось...
только были проблемы.. пришлось назначить переменную tt:variant; okDate1:string;

        tt:=okonch[i];
       FormatDateTime('dd.mm.yyyy', tt);
       okDate1:=Datetostr(tt);


ТОлько после этого заработало.. а до этого ошибку выдовало...

Спасибо..

___

to comtat 

 smile c UnixTime я не работал ещеsmile , но всеравно спасибо..

______
осталось решить вопрос с выходными и праздничными днями... (может через DateTimePicker можно какнить?)

Автор: Snowy 2.8.2006, 09:06
Код
okDate1 := DateToStr(TDateTime(okonch[i]));

Узнать текущий день недели - 
Код
n := DayOfWeek(TDateTime(okonch[i]));

Автор: Fedia 2.8.2006, 11:31
Цитата

не у меня okonch[i] по формуле считается....

okonch - у тебя этот массив какого типа ? Если array of real, то мой пример должен работать, если нет, то FormatDateTime('dd.mm.yyyy', TDateTime(okonch[i])).
Цитата

        tt:=okonch[i];
       FormatDateTime('dd.mm.yyyy', tt);
       okDate1:=Datetostr(tt);

Вот так точно не нужно делать, во первых лишняя переменная, во вторых использование типа вариант очень редко можно считать оправданным, т.к. его обработка достаточно медленная.

На счет дат: организуй цикл перебора дат for i:=trunc(dt1) to trunc(dt2) do и проверяй при помощи функции DayOfWeek какой это день недели, если 1 или 7-й, то не считай их. На счет праздников сложнее, т.к. праздники - штука не постоянная. Можно сделать массив [1..365] of boolean в которой обозначить праздники и далее их учитывать.

Автор: AJIeKcEu 2.8.2006, 12:20
Все у меня все получилось.... всем спасибо

для праздников я просто сделал:


Код

        ...................
 n7:=formatDateTime('dd.mm', tt);
             if (n7='12.06') or (n7='01.01')or (n7='02.01')or (n7='08.03')
                 or (n7='01.05')or (n7='09.05')or (n7='11.10')or (n7='7.11')
                 or (n7='07.01') then  ....
......................................


А выходные через цикл (Спасибо  Snowy )

Код

.................
 n := DayOfWeek(TDateTime(okonch[i])); 
.................



Всем благодарен... тему можно закрыть!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)