用 C 语言获取当前时间/日期/日期/年份的最有效方法是什么?由于我必须多次执行此操作,因此我需要一种真正有效的方法。我在freeBSD上。
提前致谢。
用 C 语言获取当前时间/日期/日期/年份的最有效方法是什么?由于我必须多次执行此操作,因此我需要一种真正有效的方法。我在freeBSD上。
提前致谢。
/* 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 。
标准 C 仅提供一种获取时间的方法 -time()
可以使用localtime()
或转换为时间/日期/年份gmtime()
。如此琐碎,这一定是最有效的方法。
任何其他方法都是特定于操作系统的,您还没有告诉我们您使用的是什么操作系统。
这真的取决于你所说的“很多”是什么意思:-)
我想你可能会发现使用 ISO 标准time()
和localtime()
函数已经足够快了。例如,在我的上"Intel(R) Core(TM)2 Duo CPU E6850 @ 3.00GHz"
,使用未优化的代码,我可以time()
在 1.045 秒内调用一千万次,time()/localtime()
在 0.98 秒内调用一百万次。这是否足够快满足您的需求,只有您可以决定,但我很难想出一个需要比这更多的用例。
该time()
函数为您提供自纪元以来的秒数,同时localtime()
将其转换为本地时间(从 UTC 开始)并将其拆分为更可用的形式,即struct tm
结构。
#include <time.h>
time_t t = time (NULL);
struct tm* lt = localtime (&t);
// Use lt->tm_year, lt->tm_mday, and so forth.
任何尝试缓存日期/时间并使用其他方式来找出应用到它的增量,例如 with clock()
,几乎总是会:
最简单的是
#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));
您可以使用 gettimeofday() 函数以秒和微秒为单位获取时间,这(我认为)非常快(因为 Linux 内核 do_gettimeofday() 中有类似的函数),然后您可以将其转换为所需的格式(可能使用上述功能进行转换。
我希望这有帮助。
几乎唯一的方法(无论如何,这是标准的)是调用time
后跟localtime
or gmtime
。
好吧,一般来说,直接访问操作系统的 API 来获取时间可能是最有效的,但不是那么便携.....
C时间功能还可以。
但真的取决于你的平台
假设一秒钟的分辨率就足够了,FreeBSD(或任何 POSIX 系统)上最有效的方法可能是
setitimer (ITIMER_REAL, ...)
SIGALRM
,更新一个保存当前时间的静态变量即使信号由于系统过载而丢失,这也会在下一次安排进程时自行纠正。