4

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

提前致谢。

4

8 回答 8

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 。

于 2010-08-04T04:50:35.093 回答
5

标准 C 仅提供一种获取时间的方法 -time()可以使用localtime()或转换为时间/日期/年份gmtime()。如此琐碎,这一定是最有效的方法。

任何其他方法都是特定于操作系统的,您还没有告诉我们您使用的是什么操作系统。

于 2010-08-04T04:51:45.267 回答
3

这真的取决于你所说的“很多”是什么意思:-)

我想你可能会发现使用 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(),几乎总是会:

  • 慢一点;和
  • 受困于你不会接受外部时间变化的事实。
于 2010-08-04T04:47:38.453 回答
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));
于 2010-08-04T04:47:26.653 回答
1

您可以使用 gettimeofday() 函数以秒和微秒为单位获取时间,这(我认为)非常快(因为 Linux 内核 do_gettimeofday() 中有类似的函数),然后您可以将其转换为所需的格式(可能使用上述功能进行转换。

我希望这有帮助。

于 2010-08-04T09:57:34.037 回答
0

几乎唯一的方法(无论如何,这是标准的)是调用time后跟localtimeor gmtime

于 2010-08-04T04:47:40.263 回答
0

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

C时间功能还可以。

但真的取决于你的平台

于 2010-08-04T04:49:16.380 回答
0

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

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

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

于 2012-07-01T07:14:48.223 回答