我想获得系统时间,包括秒的小数部分。是否可以在标准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不允许我。
答案 0 :(得分: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()
(可能是因为它需要一些系统设置,如白天)。因此,当您在多线程应用程序中广泛使用它时,可能会出现性能问题
答案 1 :(得分:1)
标准C不提供亚秒级分辨率时序。
POSIX确实提供亚秒级分辨率时序 - 事实上,有许多不同的方法,包括你展示的gettimeofday()
。
答案 2 :(得分: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);