1

我想获取系统时间,包括秒的小数部分。在标准 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

请帮助我,Windows操作系统怎么可能。如果 ANSI C 不允许我。

4

3 回答 3

1

像这样:

#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()(可能是因为它需要一些系统设置,比如白天)。因此,当您在多线程应用程序中广泛使用它时,可能会出现性能问题

于 2009-12-24T07:31:57.750 回答
1

标准 C 不提供亚秒级分辨率计时。

POSIX 确实提供了亚秒级的分辨率计时——事实上,有很多不同的方法,包括gettimeofday()你展示的。

于 2009-12-25T02:40:10.240 回答
0

在上面的代码中

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);
于 2018-09-13T15:37:32.203 回答