Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Про время


Автор: qaz 26.3.2002, 17:28
как перевести разницу во времени в кол - во секунд. То есть данное время 16.00 , второе время 13.03
и надо узнать сколько точно секунд между ними (это для прогреес бара таймера, если есть др. способ подскажите)

ЗЫ пытался что то придумать, но почему то иногда получаются левые пару тройку секунд или минут. Вот алгортм

hourc=m_set.GetHour();
minc=m_set.GetMinute();
sec=m_time.GetSecond();
hour=m_time.GetHour();
min=m_time.GetMinute();

if(hourc<hour)
{
   if(hour>12) houre=24-hour+hourc;
   else houre=12-hour+hourc;
}
else houre=hourc-hour;

if(minc<min)
{
   mine=60-minc+min;
   if(hourc-hour==0) houre=24;
   houre=houre-1;
}
else mine=minc-min;

//if(minc==0 || minc==60) houre=houre-1;

p=((houre*60+mine)*60);//-(sec);
p=p-p/14;
m_prog.SetRange(0,p);
m_prog.SetStep(1);

где hourc, minc, sec - конечное время
hour, min - начальное время
p -кол-во делений в прогресс баре (его имнно мне и надо точно узнать) :sneaky2  :notify

Автор: Sheff 26.3.2002, 17:42
Попробуй использовать MFC класс CTimeSpan, это разница двух объектов CTime, в нём есть всякие функции форматирования времени

Автор: TwoK 26.3.2002, 17:47
Ну так вот.

Время в виндах лежит в формате "количество секунд с даты 1 января 1ххх" (если не изменяет склероз, с 1970 или с 1870, неважно).

Так вот, например, в Билдере я могу сделать TDateTime time1, time2, time3; time1 = "10.01.2002 13:00"; time2 = "10.01.2002 16:01" и потом сделать time3 = time2 - time 1 и в time3  я получу "00.00.0000 03:01"

Ну эти тексты есссно после переформатирования в String.

Автор: keisik 26.3.2002, 19:34
Если ты сам снимаешь время в моменты замера, а не используешь откуда-нибудь, и в перерывах между ними комп не выключается - есть смысл юзать DWORD timeGetTime(); Она тебе вернёт с точностью до миллисекунд.
А если ты вычисляешь разницу между уже указанными временами - то действительно CTimeSpan и CTime или вот так:
Код

COleDateTime t1( 1999, 3, 19, 22, 15, 0 ); // 10:15PM March 19, 1999
COleDateTime t2( 1999, 3, 20, 22, 15, 0 ); // 10:15PM March 20, 1999

// Subtract 2 COleDateTimes
COleDateTimeSpan ts = t2 - t1;

// one day is 24 * 60 * 60 == 86400 seconds
ASSERT( ts.GetTotalSeconds() == 86400L );

// Add a COleDateTimeSpan to a COleDateTime.
ASSERT( ( t1 + ts ) == t2 );

// Subtract a COleDateTimeSpan from a COleDateTime.
ASSERT( ( t2 - ts ) == t1 );

Автор: qaz 26.3.2002, 21:37
Пасиба всем :laugh помогло !

Автор: derevenge 14.4.2007, 10:19
А как можно поменять системное время? smile 

Автор: fantast 14.4.2007, 10:33
Цитата(derevenge @  14.4.2007,  10:19 Найти цитируемый пост)
А как можно поменять системное время?  

системное SetSystemTime()
локальное SetLocalTime()
это апишные функции

Автор: derevenge 16.4.2007, 17:37
сможешь привести пример по изменению даты на 1 час 1 минуту и 1 секунуд назад? smile 

Автор: console 16.4.2007, 19:40
Код

BOOL SetSystemTime(CONST SYSTEMTIME *lpSystemTime);


lpSystemTime указывает на SYSTEMTIME, структуру, содержащую текущее системное время и дату...

структура SYSTEMTIME:

Код

typedef struct _SYSTEMTIME
{
    WORD wYear; 
    WORD wMonth; 
    WORD wDayOfWeek; 
    WORD wDay; 
    WORD wHour; 
    WORD wMinute; 
    WORD wSecond; 
    WORD wMilliseconds; 
} SYSTEMTIME;


Создаем временную структуру SYSTEMTIME.... считываем в нее текущее время:
Код

GetSystemTime(&tmp_SYSTIME);

отнимаем от часов, минут и секунд единицу...


юзаем 
Код

SetSystemTime(&tmp_SYSTIME);



если где ошибся, или предложил нерациональный вариант, поправьте plz... только начинаю изучение winAPI

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)