如何使用time.h获取UTCTime中秒的小数部分

我想获得系统时间,包括秒的小数部分。是否可以在标准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%ldn",buffer,tv.tv_usec);                                               

   return 0;                                                                          


   } 
输出是 12-25-2009 11:09:18.35443541 请帮助我,窗口操作系统怎么可能。如果ANSI C不允许我。     
已邀请:
标准C不提供亚秒级分辨率时序。 POSIX确实提供亚秒级分辨率计时 - 实际上,有许多不同的方法,包括你显示的
gettimeofday()
。     
像这样:
#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()
的呼叫(可能是因为它需要一些系统设置,比如白天)。因此,当您在多线程应用程序中广泛使用它时,可能会出现性能问题     
在上面的代码中
printf("%s%ldn",buffer,tv.tv_usec);
大多数时候都会工作,但对于小的tv.tv_usec值来说这是不正确的。 如果tv.tv_usec为123,则打印时应打印
HH:MM:SS.123
HH:MM:SS.000123
试试这个:
printf("%s%.6ldn", buffer, tv.tv_usec);
    

要回复问题请先登录注册