使用C语言获取当前时间/日期/日/年的最有效方法是什么?由于我必须多次执行,我需要一种真正有效的方法。 我在freeBSD上。
提前感谢。
答案 0 :(得分:6)
/* ctime example */
#include <stdio.h>
#include <time.h>
int main ()
{
time_t rawtime;
time ( &rawtime );
printf ( "The current local time is: %s", ctime (&rawtime) );
return 0;
}
如果您需要ctime,可以使用{{3}}。
答案 1 :(得分:5)
标准C只提供一种获取时间的方法 - time()
- 可以使用localtime()
或gmtime()
转换为时间/日期/年份。如此简单,这必定是最有效的方式。
任何其他方法都是特定于操作系统的,您还没有告诉我们您正在使用的操作系统。
答案 2 :(得分:3)
这实际上取决于你所说的“很多”: - )
我认为您可能会发现使用ISO标准time()
和localtime()
函数的速度非常快。例如,在"Intel(R) Core(TM)2 Duo CPU E6850 @ 3.00GHz"
上,使用未经优化的代码,我可以在1.045秒内调用time()
一千万次,在0.98秒内调用time()/localtime()
组合五十万次。这是否足以满足您的需求,只有您可以决定,但我很难尝试提出一个需要更多咕噜声的用例。
time()
函数为您提供自纪元以来的秒数,而localtime()
则将其转换为本地时间(来自UTC)并将其拆分为更可用的形式{{1}结构。
struct tm
任何尝试缓存日期/时间并使用其他方式找到要应用的delta(例如使用#include <time.h>
time_t t = time (NULL);
struct tm* lt = localtime (&t);
// Use lt->tm_year, lt->tm_mday, and so forth.
)几乎总是如此:
答案 3 :(得分:1)
最简单的是
#include <time.h>
//...
time_t current_time = time (NULL);
struct tm* local_time = localtime (¤t_time);
printf ("the time is %s\n", asctime (local_time));
答案 4 :(得分:1)
您可以使用gettimeofday()函数以秒为单位获取时间&amp; (我认为)非常快的微秒(因为在Linux内核do_gettimeofday()中有类似的功能),然后你可以将它转换为你需要的格式(可能使用上面提到的函数进行转换。
我希望这会有所帮助。
答案 5 :(得分:0)
仅仅 方式(无论如何,这是标准的)是拨打time
,然后是localtime
或gmtime
。
答案 6 :(得分:0)
好吧,一般来说,直接访问操作系统的API以获得时间可能是最有效的,但不是那么便携......
C时间功能正常。
但实际上取决于您的平台
答案 7 :(得分:0)
假设一秒钟的分辨率足够,可能是FreeBSD(或任何POSIX系统)上最有效的方式
setitimer (ITIMER_REAL, ...)
SIGALRM
时,更新保持时间的静态变量即使信号由于系统过载而丢失,这也会在下次安排过程时自行纠正。