Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.14;
Скачать: CL | DM;

Вниз

Узнать разницу между двумя моментами (дата,время)   Найти похожие ветки 

 
Dmitriy_   (2007-09-19 11:39) [0]

Подскажите пожалуйста!
Мне нужно узнать разницу в часах и минутах между двумя моментами (сохраненная ранее Дата/время и Дата/время в настоящий момент).
Я думаю сделать это через 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-часовой системе?

И вообще, может подскажете, как можно решить мою задачу другим, более правильным способом?

Заранее спасибо!


 
Плохиш ©   (2007-09-19 11:45) [1]


> Dmitriy_   (19.09.07 11:39)  

dHour := trunc((lt2-lt1) * 24);
dMinute := trunc(((lt2-lt1) * 24 - dHour)*60);


> но возник вопрос. если у юзера стоит не 24-часовая настройка,
>  а 12, будет ли это работать или надо GetSystemTime будет
> выдавать также в 12-часовой системе?

Стоит актуализировать орешник, даю за эту фразу 2 ореха :-))


 
Ega23 ©   (2007-09-19 11:46) [2]

Вах!!!
Почти IncDay!


 
Desdechado ©   (2007-09-19 11:47) [3]

var момент1, момент2: TDateTime;

разница := момент2 - момент1


 
Ega23 ©   (2007-09-19 11:48) [4]

Автор, почитай, что такое тип TDateTime, как он устроен, а также посмотри в сторону функций Now, HoursBetween и MinutesBetween


 
Dmitriy_   (2007-09-19 11:51) [5]

Удалено модератором
Примечание: А жевать придется тебе


 
Сергей М. ©   (2007-09-19 11:58) [6]

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) [7]


> Остальным: Форум для новичков, если вам нечего сказать по
> делу - лучше жевать.


Новичкам рекомендуется для начала литературу почитать.


> Все мы крутые в чем-то.


Круто - это когда производная резко изменяется.


> и уверен, что во многих вещах я могу так же над вами угорать
> до потери пульса.


Смотри окончательно не потеряй.


> Не можете помочь - лучше молчите


Глаза разуй. Тебе помогли ВСЕ.


 
Jeer ©   (2007-09-19 12:00) [8]


> Dmitriy_   (19.09.07 11:51) [5]


А мы тут все тебе помогаем, у каждого свои способы, но прежде чем начинать вякать "угорающим", не мешает заглянуть в справку и начать с базовой для тебя мисли о формате TDateTime.

Или ты "программы" пишешь методом тыка ?


 
MsGuns ©   (2007-09-19 12:14) [9]

Просто пример вычисления интервала ;)

 // Преобразование интервала времени в строку как чч:мм:сс
 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;


 
Desdechado ©   (2007-09-19 12:24) [10]

> MsGuns ©   (19.09.07 12:14) [9]
Загрузил...



Страницы: 1 вся ветка

Текущий архив: 2007.10.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
6-1171636318
ovb68
2007-02-16 17:31
2007.10.14
ServerSocket, одновременная передача файлов клиентами


8-1166810431
Her.Zinger
2006-12-22 21:00
2007.10.14
Работа с изображениями DXImage


3-1181552792
Sapos
2007-06-11 13:06
2007.10.14
Сравнение дат.


15-1190120030
tesseract
2007-09-18 16:53
2007.10.14
Демократия в действии!!


1-1185813272
fdooch
2007-07-30 20:34
2007.10.14
Глобальный хук WH_MOUSE_LL