Как получить дробную часть секунд в UTCTime, используя time.h - PullRequest
1 голос
/ 24 декабря 2009

Я хочу получить системное время, включая дробную часть секунд. Возможно ли это в стандарте c (ANSI C)? Если нет, то скажите мне некоторые библиотеки для оконной ОС, чтобы я сделал это возможным. В Linux у меня есть следующий код с отлично работает для меня.

 #include <sys/time.h>                                                                
 #include <time.h>                                                                    
 #include <stdlib.h>                                                                  
 #include <stdio.h>                                                                  

 int main(void)                                                                       
 {                                                                                    
   char buffer[30];                                                                   
   struct timeval tv;                                                                 

   time_t curtime;                                                                    



   gettimeofday(&tv, NULL);                                                           
   curtime=tv.tv_sec;                                                                 

   strftime(buffer,30,"%m-%d-%Y  %T.",localtime(&curtime));                           
   printf("%s%ld\n",buffer,tv.tv_usec);                                               

   return 0;                                                                          


   } 

Выход

12-25-2009 11: 09: 18.35443541

Пожалуйста, помогите мне, как это возможно для оконной ОС. ЕСЛИ ANSI C не позволяет мне.

Ответы [ 3 ]

1 голос
/ 25 декабря 2009

Стандарт С не обеспечивает разрешение в секунду.

POSIX действительно обеспечивает синхронизацию с точностью до секунды - фактически, существует множество различных способов сделать это, включая gettimeofday(), который вы показываете.

1 голос
/ 24 декабря 2009

Как это:

#include <wtypes.h>
int main()
{
    SYSTEMTIME t;
    GetSystemTime(&t);
    int year = t.wYear;
    int month = t.wMonth;
    int day = t.wDay;
    int hour = t.wHour;
    int minute = t.wMinute;
    int second = t.wSecond;
    int second_fraction = t.wMilliseconds;
   return 0;
}

Пара замечаний о производительности, если это важно для вас:

1) gettimeofday() довольно быстрый и если используется в нескольких потоках, это не вызывает ухудшения производительности

2) Внутри localtime() есть звонок на pthread_mutex_lock() (возможно, потому что ему нужны некоторые системные настройки, такие как дневное время). Поэтому при интенсивном использовании в многопоточном приложении могут возникнуть проблемы с производительностью

0 голосов
/ 13 сентября 2018

В приведенном выше коде

printf("%s%ld\n",buffer,tv.tv_usec);

будет работать большую часть времени, но это не правильно для небольших значений tv.tv_usec.

Если tv.tv_usec равен 123, он напечатает HH:MM:SS.123, когда должен будет печатать HH:MM:SS.000123

Попробуйте это:

printf("%s%.6ld\n", buffer, tv.tv_usec);
...