![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Узнать разницу между двумя моментами (дата,время) [D7, XP]
Dmitriy_ © (2007-09-19 11:39:00)Подскажите пожалуйста!
Мне нужно узнать разницу в часах и минутах между двумя моментами (сохраненная ранее Дата/время и Дата/время в настоящий момент).
Я думаю сделать это через GetSystemTime примерно так
GetSystemTime(lt2);
if (lt2.wYear=lt1.wYear) and (lt2.wMonth=lt1.wMonth) then
begin
if lt2.wDay=lt1.wDay then
begin
if lt2.wMinute>=lt1.wMinute then result:= (lt2.wHour - lt1.wHour)+round((lt2.wMinute-lt1.wMinute)/100) else
result:= (lt2.wHour - lt1.wHour-1)+round((lt2.wMinute-lt1.wMinute+60)/100);
end else if lt2.wDay>lt1.wDay then
begin
if lt2.wMinute>=lt1.wMinute then result:= (24-lt1.wHour)+lt2.wHour+round((lt2.wMinute-lt1.wMinute)/100) else
result:= (24-lt1.wHour-1)+round((lt2.wMinute-lt1.wMinute+60)/100);
end;
end else <Разница больше суток>
но возник вопрос. если у юзера стоит не 24-часовая настройка, а 12, будет ли это работать или надо GetSystemTime будет выдавать также в 12-часовой системе?
И вообще, может подскажете, как можно решить мою задачу другим, более правильным способом?
Заранее спасибо!
Desdechado (2007-09-19 12:24:00) [1]> MsGuns © (19.09.07 12:14) [9]
Загрузил...
MsGuns (2007-09-19 12:14:00) [2]Просто пример вычисления интервала ;)
// Преобразование интервала времени в строку как чч:мм:сс
function MS_ComFnPrintTimeInterval(tm: integer): string; overload;
function MS_ComFnPrintTimeInterval(ds,de: TDateTime): string; overload;
...
function MS_ComFnPrintTimeInterval(tm: integer): string;
function ExtNCharTo2(NChar: integer): string;
begin
result := IntToStr(NChar);
while Length(result)<2 do
result := '0'+result;
end;
begin
result := ExtNCharTo2(tm div 3600)+':'+
ExtNCharTo2((tm-(tm div 3600)*3600) div 60)+':'+
ExtNCharTo2(tm mod 60);
end;
function MS_ComFnPrintTimeInterval(ds,de: TDateTime): string;
// ds - дата-время начала
// de - дата-время конца
var
tms,tme: TTimeStamp;
ts,te: LongInt;
function ExtNCharToN(Number,NDigits: integer): string;
begin
result := IntToStr(Number);
while Length(result)<NDigits do result := '0'+result;
end;
begin
tms := DateTimeToTimeStamp(ds);
tme := DateTimeToTimeStamp(de);
ts := tms.Date*24*3600+tms.Time div 1000;
te := tme.Date*24*3600+tme.Time div 1000;
result := ''; if ts>te then result := '-';
ts := Abs(te-ts);
result := result+ExtNCharToN(ts div 3600,1)+':'+
ExtNCharToN((ts div 60) mod 60,2)+':'+
ExtNCharToN(ts mod 60,2);
end;
Jeer (2007-09-19 12:00:00) [3]
> Dmitriy_ (19.09.07 11:51) [5]
А мы тут все тебе помогаем, у каждого свои способы, но прежде чем начинать вякать "угорающим", не мешает заглянуть в справку и начать с базовой для тебя мисли о формате TDateTime.
Или ты "программы" пишешь методом тыка ?
Сергей М. (2007-09-19 11:58:00) [4]var
dt1, dt2: TDateTime;
Minutes, Hours: Int64;
..
Minutes := MinutesBetween(dt2, dt1);
Hours := Minutes div 60;
Minutes := Minutes mod 60;
Ega23 (2007-09-19 11:58:00) [5]
> Остальным: Форум для новичков, если вам нечего сказать по
> делу - лучше жевать.
Новичкам рекомендуется для начала литературу почитать.
> Все мы крутые в чем-то.
Круто - это когда производная резко изменяется.
> и уверен, что во многих вещах я могу так же над вами угорать
> до потери пульса.
Смотри окончательно не потеряй.
> Не можете помочь - лучше молчите
Глаза разуй. Тебе помогли ВСЕ.
Dmitriy_ (2007-09-19 11:51:00) [6]Удалено модератором
Примечание: А жевать придется тебе
Ega23 (2007-09-19 11:48:00) [7]Автор, почитай, что такое тип TDateTime, как он устроен, а также посмотри в сторону функций Now, HoursBetween и MinutesBetween
Desdechado (2007-09-19 11:47:00) [8]var момент1, момент2: TDateTime;
разница := момент2 - момент1
Ega23 (2007-09-19 11:46:00) [9]Вах!!!
Почти IncDay!
Плохиш (2007-09-19 11:45:00) [10]
> Dmitriy_ (19.09.07 11:39)
dHour := trunc((lt2-lt1) * 24);
dMinute := trunc(((lt2-lt1) * 24 - dHour)*60);
> но возник вопрос. если у юзера стоит не 24-часовая настройка,
> а 12, будет ли это работать или надо GetSystemTime будет
> выдавать также в 12-часовой системе?
Стоит актуализировать орешник, даю за эту фразу 2 ореха :-))