Требуется вывести на экран текущее время в формате Час:Минуты:Секунды:Долисекyнды.
Язык - C/C++
Среда - Linux (Cygwin или OpenSuse).Помогите плиз. :)
>Требуется вывести на экран текущее время в формате Час:Минуты:Секунды:Долисекyнды.Доли какого размера? Милли? Микро? Нано?
>>Требуется вывести на экран текущее время в формате Час:Минуты:Секунды:Долисекyнды.
>
>Доли какого размера? Милли? Микро? Нано?Милли :)))
>>>Требуется вывести на экран текущее время в формате Час:Минуты:Секунды:Долисекyнды.
>>
>>Доли какого размера? Милли? Микро? Нано?
>
>Милли :)))man gettimeofday
>>>>Требуется вывести на экран текущее время в формате Час:Минуты:Секунды:Долисекyнды.
>>>
>>>Доли какого размера? Милли? Микро? Нано?
>>
>>Милли :)))
>
>man gettimeofdayА можно примерчик?
>>
>>man gettimeofday
>
>А можно примерчик?Извини. Указание было правильное, и это единственная неочевидная для не-UNIX программиста функция. Как использовать ее и остальные (gmtime/localtime и printf) - выясни сам. Иначе тебе нечего делать в C.
>>>
>>>man gettimeofday
>>
>>А можно примерчик?
>
>Извини. Указание было правильное, и это единственная неочевидная для не-UNIX программиста функция.
>Как использовать ее и остальные (gmtime/localtime и printf) - выясни сам.
>Иначе тебе нечего делать в C.Ну, ладно :) Просто синтаксис не очень понятен для меня.
Я сделал вот так:#include "windows.h"
#include "stdio.h"int main()
{
SYSTEMTIME time;
GetSystemTime(&time);
printf ("Hours: %i;\n\rMinuts: %i;\n\rSeconds: %i;\n\rmiliseconds: %i\n\r", time.wHour+2, time.wMinute, time.wSecond, time.wMilliseconds);}
Работает.. но я как не очень доволен, что часы корректирую... Можно как-нить это исправить???
>[оверквотинг удален]
>{
> SYSTEMTIME time;
> GetSystemTime(&time);
> printf ("Hours: %i;\n\rMinuts: %i;\n\rSeconds: %i;\n\rmiliseconds: %i\n\r", time.wHour+2, time.wMinute, time.wSecond, time.wMilliseconds);
>
>}
>
>
>Работает.. но я как не очень доволен, что часы корректирую... Можно как-нить
>это исправить???1. это форум по unix/posix, а не windows(не posix совсем). Для posix-совместимых систем выше уже была указана нужная функция.
2. вышеуказанный код не портабелен и специфичен для windows.
3. банальное: где return или exit() ?
4. часы корректировать подобным образом это не по христиански :)
5. правильно \r\n, а не наоборот.
6. традиционно используется %d, хотя в windows хз
7. и наконец, формат в вашем примере не соответствует формату вывода в первом вашем посте :)
>1. это форум по unix/posix, а не windows(не posix совсем). Для posix-совместимых
>систем выше уже была указана нужная функция.
>2. вышеуказанный код не портабелен и специфичен для windows.
>3. банальное: где return или exit() ?
>4. часы корректировать подобным образом это не по христиански :)
>5. правильно \r\n, а не наоборот.
>6. традиционно используется %d, хотя в windows хз
>7. и наконец, формат в вашем примере не соответствует формату вывода в
>первом вашем посте :)Могу сделать вывод - надо идти вам в QA.
1. Смотри ниже.
2. Согласен, но мне полюбе, так как за это мне не платят ;)
3. Добавил.. для меня не критично
4. Вот и я так думаю ;)
5. Ну, эт как посмотреть
6. Эх, традиции...
7. Формат не так уж и тяжело подделатьСделал вот так для сравнения:
#include <sys/time.h>
#include <stdio.h>
#include <windows.h>int main(void)
{
char buffer[30];
struct timeval tv;time_t curtime;
gettimeofday(&tv, NULL);
curtime=tv.tv_sec;strftime(buffer,30,"%H:%M:%S",localtime(&curtime));
printf("\nLinux: ");
printf("%s:%d Seconds???:%d",buffer,tv.tv_usec,tv.tv_sec);SYSTEMTIME time;
GetSystemTime(&time);
printf("\nWindows: ");
printf ("%d:%d:%d:%d", time.wHour+2, time.wMinute, time.wSecond, time.wMilliseconds);return 0;
}Получаю в результате:
Linux: 18:13:55:271892 Seconds???:1225296835
Windows: 18:13:55:271Что по сути правильно, но только вот появились вопросы:
1. Почему секунды не совпадают в tv.tv_sec?
2. Почему не работает форматирование для %2.2d? Это можно исправить?
>2. Почему не работает форматирование для %2.2d? Это можно исправить?Потому что так неправильно. Либо "%2.2f", либо "%2d".
man printf - format specifiers
>>2. Почему не работает форматирование для %2.2d? Это можно исправить?
>
>Потому что так неправильно. Либо "%2.2f", либо "%2d".
>man printf - format specifiersДа и так он не работает.. :(
>Могу сделать вывод - надо идти вам в QA.
>1. Смотри ниже.
>2. Согласен, но мне полюбе, так как за это мне не платят
>;)Учитесь делать правильные выводы. Вам намекают что вы не по адресу обратились с кодом под винду. Вы же не спрашиваете на форуме фанатов volvo про технические характеристики стиральных машин ?
>3. Добавил.. для меня не критично
а потом самолеты падают, ну это тоже.. не критично.
>5. Ну, эт как посмотретьа никак не смотреть, правильно \r\n и точка.
>7. Формат не так уж и тяжело подделатьче за бред, я говорю что вы просите один формат, а сами же выводите иначе, т.е. действуете не последовательно, причем тут подделать?
>Получаю в результате:
>Linux: 18:13:55:271892 Seconds???:1225296835
>Windows: 18:13:55:271
>Что по сути правильно, но только вот появились вопросы:
>1. Почему секунды не совпадают в tv.tv_sec?в tv_sec хранится время с начала эпохи в секундах, с чем оно не совпадает?
>2. Почему не работает форматирование для %2.2d? Это можно исправить?
внимательным чтением документации, разберитесь что значат флаги ширины и точности для каждого типа поля (цифровое, с плавающей точкой, строка) в спецификаторах.
http://www.opennet.me/man.shtml?topic=printf&category=3&russ...
все работает если правильно применять спецификаторы и понимать как именно они влияют на выводимые значения.
Чего вы такие напряжённые??? Я не собираюсь быть программиром С/С++, тем более в UNIX (хотя очень уважаю данную специфику и людей работающих в ней), так что самолёты из-за меня падать не будут. :) Для меня прежде всего важен конструктивный разговор и результат (имею ввиду на форуме), а все стандарты и т.п. в результате будут соблюдены.
Что же касается вас, то вы лично мне полезной инфы здесь написали два слова: man gettimeofday. Хотя я и до этого сам допёр.Вот финальный результат моих изысканий:
#include <sys/time.h>
#include <stdio.h>int main(void)
{
char buffer[15];
struct timeval tv;
time_t curtime;gettimeofday(&tv, NULL);
curtime=tv.tv_sec;
strftime(buffer,15,"%H.%M.%S",localtime(&curtime));printf("\n%s.%02d\n",buffer,tv.tv_usec/10000);
return 0;
}Что-то ещё не устраивает в моём коде?
>Что-то ещё не устраивает в моём коде?Молодец. Пожалуйста, не обижайтесь на тех, кто пытался вам помочь написать хороший кусок кода.
>>Что-то ещё не устраивает в моём коде?
>
>Молодец. Пожалуйста, не обижайтесь на тех, кто пытался вам помочь написать хороший
>кусок кода.Спасибо. Я не обижаюсь, просто первый раз сталкиваюсь с таким уровнем мышления. ;)