Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-82349
Borealis
2003-07-20 17:02
2003.09.25
По имени компьютера в домене его IP-адрес


3-82134
Rootal
2003-09-04 13:18
2003.09.25
Создание отчета


3-82071
Vitaly
2003-08-29 19:43
2003.09.25
SQL


14-82400
Dmitriy O.
2003-09-03 08:53
2003.09.25
Я счастлив что я есть


14-82495
Verg
2003-09-05 14:54
2003.09.25
Поиск на этом сайте и в частности по форумам.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский