Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
4 / 4 / 0
Регистрация: 10.01.2012
Сообщений: 43
1

Отображение времени в читаемом виде

06.04.2012, 11:38. Показов 2825. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть такая функция
C++
1
DWORD GetTickCount(void);
Она выводит кол-во мс от начала старта системы, с помощью неё я вывожу время от старта функции в моей проге:
C++
1
int startMyProg = GetTickCount();
и получаю в любой момент время работы:
C++
1
int timeWork = GetTickCount() - startMyProg;
Теперь вопрос, как можно преобразовать это время в удобно перевариваемый вид: 00:24:45
Существуют ли стандартные функции или нужно писать свою?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2012, 11:38
Ответы с готовыми решениями:

Отформатировать текст кода в читаемом виде
Здравствуйте, помогите пожалуйста отформатировать текст кода в читаемом виде: #include <stdio.h>...

Даты в VB в читаемом виде.
Кто знает, помогите решить проблему: Прочитал поле даты из БД Access, оно вернулось как ...

Записать формулы в виде, читаемом в Excel
Вот формула

Вывод dbf файла в читаемом виде.
читаю из файла базы данных (dbf в кодировке win1251) "АБВГДЕЁЖЗ" а на экран или в файл выводится...

16
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
06.04.2012, 12:36 2
Цитата Сообщение от chuvak2008f Посмотреть сообщение
Существуют ли стандартные функции или нужно писать свою?
А что тут писать? на 24*3600*1000 делишь - дни, остаток на 3600*1000 - часы, остаток на 60*1000 - минуты, остаток на 1000 секунды, остаток мс
0
Заблокирован
Автор FAQ
06.04.2012, 14:50 3
chuvak2008f, посмотри сюда
Детальная информация о времени работы системы
0
4 / 4 / 0
Регистрация: 10.01.2012
Сообщений: 43
06.04.2012, 16:23  [ТС] 4
Цитата Сообщение от Nekto Посмотреть сообщение
А что тут писать? на 24*3600*1000 делишь - дни, остаток на 3600*1000 - часы, остаток на 60*1000 - минуты, остаток на 1000 секунды, остаток мс
Я в общем то искал стандартный метод. А так то своё это не проблема

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Много букаф для такой скромной задачи, потом почитаю

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// *** MEDIUM КОД
 
String toNormalTime(DWORD dMillisec) {
    float dSec = dMillisec / 1000;
 
    int iHour   = int(dSec / 3600),
        iMin    = int(dSec / 60 - iHour * 60),
        iSec    = int(dSec - int(dSec / 60) * 60);
    String  hour    = (iHour<10)? "0"+IntToStr(iHour): IntToStr(iHour),
            min     = (iMin<10)?  "0"+IntToStr(iMin):  IntToStr(iMin),
            sec     = (iSec<10)?  "0"+IntToStr(iSec):  IntToStr(iSec);
 
    return hour+":"+min+":"+sec;
}
 
// *** HARD КОД
 
String toNormalTime(DWORD dMillisec) {
    float dSec = dMillisec / 1000;
    int iHour, iMin, iSec;
    String  hour    = ((iHour   =int(dSec / 3600))<10)?                 "0"+IntToStr(iHour): IntToStr(iHour),
            min     = ((iMin    =int(dSec / 60 - iHour * 60))<10)?      "0"+IntToStr(iMin):  IntToStr(iMin),
            sec     = ((iSec    =int(dSec - int(dSec / 60) * 60))<10)?  "0"+IntToStr(iSec):  IntToStr(iSec);
    return hour+":"+min+":"+sec;
}
Хотя как не странно, первый выполняется на порядок быстрее, чем второй.
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
06.04.2012, 16:56 5
а так не быстрее?
C++
1
2
3
4
5
6
7
8
9
10
char* toNormalTime(DWORD dMillisec) {
    int iSec = dMillisec/1000;
    int iHour   = iSec/3600;
    iSec%=3600;
    int iMin    = iSec/60;
    iSec %=60;
    char* s=new char[9];
    sprintf(s,"%c%c:%c%c:%c%c",iHour/10+48,iHour%10+48,iMin/10+48,iMin%10+48,iSec/10+48,iSec%10+48);
    return s;
}
Правда, только для часов <100 работать будет по идее
0
Заблокирован
Автор FAQ
06.04.2012, 18:57 6
Цитата Сообщение от chuvak2008f Посмотреть сообщение
Много букаф для такой скромной задачи, потом почитаю
- ну и зря, по поводу твоего кода - тихий ужас(без обид - констатирую затраты кода положенные на его эффективность)
По поводу второго кода - Nekto, спецификатор формата %c означает что преобразовываться будет к чарам, на кой прибавлять +48 если сразу можно записать
C
1
sprintf(s,"%d%d:%d%d:%d%d",iHour/10,iHour%10,iMin/10,iMin%10,iSec/10,iSec%10);
А вообще парни пишите как вам удобней, я лишь помочь хотел
0
Заблокирован
Автор FAQ
06.04.2012, 19:22 7
Привожу код который работает с любым числом тиков. В режиме реального времени идёт индикация от чила дней до миллисекунд
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <windows.h>
#include <stdio.h>
 
char * UpdateTime(DWORD dwTime)
{
    char sTime[256] = {0};
    ULONG uDiv = 3600*24*1000;
    UINT uTime = dwTime/uDiv;
    dwTime     = dwTime%uDiv;
    uDiv = uDiv / 24;
    sprintf(sTime,"%02d:",uTime);//Записали число дней
    do
    {
        uTime  = dwTime/uDiv;
        dwTime = dwTime%uDiv;
        sprintf(sTime,"%s%02d:",sTime, uTime);
    }
    while(1000 < dwTime && (uDiv = uDiv/60));
    sprintf(sTime,"%s%03d",sTime, dwTime);//Записали число миллисекунд
    return &sTime[0];
}
 
int main()
{
    DWORD dwTime = 0;
    while(TRUE)
    {
        system("cls");
        dwTime = GetTickCount();
        printf("NT UPTIME DD:HH:MM:SS:MS %s",UpdateTime(dwTime));
        Sleep(100);
    }
    return 0;
}
Миниатюры
Отображение времени в читаемом виде  
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
06.04.2012, 20:17 8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
По поводу второго кода - Nekto, спецификатор формата %c означает что преобразовываться будет к чарам, на кой прибавлять +48 если сразу можно записать
C
1
sprintf(s,"%d%d:%d%d:%d%d",iHour/10,iHour%10,iMin/10,iMin%10,iSec/10,iSec%10);
А вообще парни пишите как вам удобней, я лишь помочь хотел
Для ускорения процесса Разве это не быстрее будет? %d ведь не знает сколько будет символов, а мы знаем, что всего лишь 1.
0
Заблокирован
Автор FAQ
06.04.2012, 20:36 9
Nekto, есть еще спецификатор длинны при этом для часов и минут и секунд нужно два символа или по твоему система не может работать подряд скажем часов 20.В общем подумай еще раз что ты написал...
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
06.04.2012, 21:05 10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Nekto, есть еще спецификатор длинны при этом для часов и минут и секунд нужно два символа или по твоему система не может работать подряд скажем часов 20.В общем подумай еще раз что ты написал...
Так мой вариант для времени работы <100 часов работает. Или нет? Если предусматривается больше, то да. А так я просто привёл к виду ХХ:ХХ:ХХ (т.е. по 2 символа ЧЧ:ММ:СС).
0
Заблокирован
Автор FAQ
06.04.2012, 21:13 11
Nekto, твои %с%с (два символа)очень легко заменяются спецификатором длины %2d(тоже будет два символа).
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
07.04.2012, 02:23 12
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Nekto, твои %с%с (два символа)очень легко заменяются спецификатором длины %2d(тоже будет два символа).
оно 0 не вставит в начале, если у нас число меньше 10 :Р
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,961
07.04.2012, 04:13 13
Цитата Сообщение от Nekto Посмотреть сообщение
оно 0 не вставит в начале, если у нас число меньше 10
C
1
2
int i = 1;
printf("%02d\n", i);
а так?
1
Заблокирован
Автор FAQ
07.04.2012, 09:33 14
Nekto, если бы раскрыл глаза и посмотрел мой код
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
sprintf(sTime,"%s%02d:",sTime, uTime);
то понял бы что пишешь глупость. Кроме того
Цитата Сообщение от Nekto Посмотреть сообщение
Для ускорения процесса Разве это не быстрее будет
- сомнительно, т.к. в твоём случае будет выполняться на 12 операций больше. Или по твоему дополнительное деление (/ или %), а также прибавление 48 не отнимает процессорного времени?
0
Заблокирован
Автор FAQ
07.04.2012, 09:46 15
Nekto, вот то о чём говорил
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <time.h>
 
int main()
{
    int nHours   = 0;
    int nMinutes = 48;
    int nSeconds = 59;
    long i, N = 100000;
    long dif1, dif2;
    long start,end;
    start = clock();
    for(i = 0; i < N; i++)
        printf
        (
            "Nekto %c%c:%c%c:%c%c\n",
            nHours/10 + 48,nHours%10 + 48,
            nMinutes/10 + 48,nMinutes%10 + 48,
            nSeconds/10 + 48, nSeconds%10 + 48
        );
    
    end   = clock();
    dif1 = end - start;
    
    start   = clock();
    for(i = 0; i < N; i++)
        printf("YurA  %02d:%02d:%02d\n",nHours,nMinutes,nSeconds);
    end     = clock();
    dif2 = end - start;
 
    printf("Time of operations :\n");
    
    printf("Nekto %u\n",dif1);
    printf("YurA  %u\n",dif2);
    getchar();
    return 0;
}
Думаю тут уже нечего говорить
Time of operations :
Nekto 6265
YurA 6156
Т.е. ты даже не ускорил свой код а замедлил
Миниатюры
Отображение времени в читаемом виде  
1
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
07.04.2012, 11:45 16
You win =)

Добавлено через 12 минут
но мой вариант все равно работает быстрее варианта с ифами

Не по теме:

не знал, что можно задавать %02d (о нулях :)), не зря на форум захожу, новое узнаю :)

0
-=ЮрА=-
07.04.2012, 12:48     Отображение времени в читаемом виде
  #17

Не по теме:

Nekto, главное что ты умеешь извлекать пользу из постов, а знания это сила, так что читай ты стал сильней как програмист(хоть и на чуточку но сильней;))
PS:

Цитата Сообщение от Nekto Посмотреть сообщение
You win =)
, это не было моей целью просто %c и +48 резали глаза вот и решил вступить с тобой в дискус:)

0
07.04.2012, 12:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2012, 12:48
Помогаю со студенческими работами здесь

Вывод русских словарей и массивов в читаемом виде
Вывод русских словарей и массивов в читаемом виде ext_log.h //* расширенный вывод */ ...

Как вывести строки в юникоде из кортежа в читаемом виде?
Извлекаю данные из файла, пробую вывести их на экран, выводится все нормально. После сортирую эти...

Рабочий пример json без каракулей и даты в читаемом виде
Уважаемые знатоки, нужен рабочий пример: как вывести в memo1 ответ json без &quot;каракулей&quot; и даты - в...

Метод __str__ не возвращает текст в "читаемом" виде
Начал изучать Джанго и столкнулся с выводом из БД текстового поля. Как пишет документация нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru