Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизРабота с датой Найти похожие ветки
← →
Юлия (2003-09-14 08:57) [0]Как определить количество дней между двумя датами?
← →
MBo (2003-09-14 09:01) [1]с помощью вычитания
← →
Думкин (2003-09-14 09:04) [2]F1 + TDateTime
← →
Anatoly Podgoretsky (2003-09-14 11:36) [3]А как определить количество градусов между двумя значениями?
← →
Ihor Osov'yak (2003-09-14 11:43) [4]2 [3] Anatoly Podgoretsky © (14.09.03 11:36)
Как, как..
Сначала создаем модель, потом реализуем..
Например, в качестве модели можно использовать подсчет на пальцах. Соответсвенно реализация - цыкл for.. Но тольно нужно не ошибится на единичку... Программисты в цыклах очень часто на единичку ошибаются.. Поэтому нужно провести тестирование. И желательно под разными операционками.. Тогда наверное точно ошибок на будет... Хотя, как говорят, ошибок не бывает - так не бывает..
← →
Ihor Osov'yak (2003-09-14 11:44) [5]зы, Юлия, сорри за стеб, это я над Анатолием издевался, не над Вами.. Он моментами очень тормозит..
← →
Утк (2003-09-14 21:47) [6]А модуль датаутиль, что кто-то отменял?
← →
-=[SDA]=- (2003-09-15 05:29) [7]Я считал время простоя вагонов, правда в часах, вот так: не совсем красиво, но зато работает
function ViefelUhr(n,k : TDateTime) : integer;
// ViefelUhr
// (n[начальный период] : TDateTime ,
// k[конечный период] : TDateTime)
// возвращает разницу дат в часах (с округлением в 30 минут)
const
MsInDay = 86400000; // миллисек в дне
HourInDay = 24;
ConverMsInHour = 3600000;
var
Ns, Ks : TTimeStamp;
Ds,Dh : Integer;
DayCount : Integer;
// ***************** С такими типами данных ***********************//
//************ максимальное время простоя вагона ******************//
//******************** 89478485 часов *****************************//
begin
Ns := DateTimeToTimeStamp(n); // начальный период
Ks := DateTimeToTimeStamp(k); // end
DayCount := Ks.Date - Ns.Date;
if DayCount = 0
then Ds := Ks.Time - Ns.Time
else Ds := (MsInDay - Ns.Time) + Ks.Time;
if DayCount > 1
then Dh := (DayCount-1) * HourInDay;
Result := Round(Ds/ConverMsInHour) + Dh;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a,b : TDateTime;
aa : integer;
s,d : TTimeStamp;
begin
a := StrToDateTime("10.2.2003 10:20:00");
b := StrToDateTime("10.2.2004 10:20:00");
label1.Caption := DateTimeToStr(a);
label2.Caption := DateTimeToStr(b);
label3.Caption := IntToStr(ViefelUhr(a,b));
end;
end.
← →
Tumcoat (2003-09-15 07:44) [8]Могу подсказать еще один момент.
Как было сказано ранее надо просто из одной вычесть другую.
Day:=DateTime1-DateTime2;
где переменная:var Day: Extended;
а дальше можешь переводить её в любой другой тип.
← →
mfender (2003-09-15 07:54) [9]
> Могу подсказать еще один момент.
> Как было сказано ранее надо просто из одной вычесть другую.
> Day:=DateTime1-DateTime2;
> где переменная: var Day: Extended;
> а дальше можешь переводить её в любой другой тип.
На самом деле правильнее былобы сказатьvar Day: Double
← →
Tumcoat (2003-09-15 08:58) [10]Не знаю насчет
var Day: Double
,
но у меня прекрасно работает и сvar Day: Extended;
← →
Anatoly Podgoretsky (2003-09-15 09:05) [11]mfender © (15.09.03 07:54) [9]
А еще правильнее TDateTime
← →
Думкин (2003-09-15 09:06) [12]TDateTime = type Double;
← →
dataMaster (2003-09-15 09:22) [13]function DifferenceDate(Date1, Date2:TDateTime):integer;
var
ds1, ds2:TTimeStamp;
begin
ds1:=DateTimeToTimeStamp(Date1);
ds2:=DateTimeToTimeStamp(Date2);
Result:=ds1.Date-ds2.Date;
end;
← →
app (2003-09-15 09:25) [14]Это я знаю и именно поэтому надо указывать TDateTime а не Double. Тоже самое и для других аналогичных случаев.
Можно привести и нагляжный пример, возьмем например типы Cardonal и DWord, они тоже не встроеные, а переопределенные и их определение менялось от версии к версии, кто пользовался этими определениями, тот имел меньше проблем, особенно со вторым. Некоторые, которые писали Integer вместо них поимели некоторые проблемы.
При том стоит обратить внимание на форму определения, написано не TDateTime = Double, а TDateTime = type Double;
Это тоже очень важно.
← →
Петров Денис (2003-09-15 09:26) [15]uses DateUtils;
и дальше:
function DaysBetween(const ANow, AThen: TDateTime): Integer;,
а так же (если пригодится, из раздела "see also"):
YearsBetween,
MonthsBetween,
HoursBetween
и т. д. до милисекунд.
← →
Думкин (2003-09-15 09:40) [16]> app © (15.09.03 09:25)
Я не тебе писал. Твоего сообщения не было когда я постил. Это я к спору про Double-Extended.
Если не хочешь залетать на версиях, то конечно, надо пользоваться нужными типами, к тому же:
Extended offers greater precision than other real types but is less portable. Be careful using Extended if you are creating data files to share across platforms.
← →
Anatoly Podgoretsky (2003-09-15 10:06) [17]Думкин © (15.09.03 09:40) [16]
В принципе не важно, кому я отвечал, это же форум. Важна суть.
Кстати это повод, что бы вставлять при ответе ссылку на сообщение, Ctrl+C, Ctrl+V
Я как раз не вставил, поскольку не ясно было, на какое сообщение реплика.
← →
wl (2003-09-15 10:28) [18]
> Anatoly Podgoretsky © (15.09.03 10:06) [17]
для цитирования лучше использовать кнопку ">"(Вставка цитаты.Выделите цитируемый текст и нажмите эту кнопку)
:)))
← →
HolACost! (2003-09-15 10:34) [19]wl © (15.09.03 10:28) [18]
Эта фича например в опере не катит!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c