Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Узнать разницу между двумя моментами (дата,время) [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 ореха :-))


Наверх

Титульная страница Поиск, карта сайта Написать письмо