在C中获取当前时间/日期/日的最有效方法

时间:2010-08-04 04:44:53

标签: c freebsd systemtime processing-efficiency

使用C语言获取当前时间/日期/日/年的最有效方法是什么?由于我必须多次执行,我需要一种真正有效的方法。 我在freeBSD上。

提前感谢。

8 个答案:

答案 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 (&current_time); 
printf ("the time is %s\n", asctime (local_time));

答案 4 :(得分:1)

您可以使用gettimeofday()函数以秒为单位获取时间&amp; (我认为)非常快的微秒(因为在Linux内核do_gettimeofday()中有类似的功能),然后你可以将它转换为你需要的格式(可能使用上面提到的函数进行转换。

我希望这会有所帮助。

答案 5 :(得分:0)

仅仅 方式(无论如何,这是标准的)是拨打time,然后是localtimegmtime

答案 6 :(得分:0)

好吧,一般来说,直接访问操作系统的API以获得时间可能是最有效的,但不是那么便携......

C时间功能正常。

但实际上取决于您的平台

答案 7 :(得分:0)

假设一秒钟的分辨率足够,可能是FreeBSD(或任何POSIX系统)上最有效的方式

  • 使用setitimer (ITIMER_REAL, ...)
  • 安装一秒间隔计时器
  • 触发SIGALRM时,更新保持时间的静态变量
  • 在需要时间时使用静态变量中的值

即使信号由于系统过载而丢失,这也会在下次安排过程时自行纠正。

相关问题