以秒为单位获取当前时间

时间:2010-02-11 07:47:14

标签: c

我想知道是否有任何函数会以秒为单位返回当前时间,仅为2位秒?我正在使用gcc 4.4.2。

4 个答案:

答案 0 :(得分:16)

以下完整程序将向您展示如何访问秒值:

#include <stdio.h>
#include <time.h>

int main (int argc, char *argv[]) {
    time_t now;
    struct tm *tm;

    now = time(0);
    if ((tm = localtime (&now)) == NULL) {
        printf ("Error extracting time stuff\n");
        return 1;
    }

    printf ("%04d-%02d-%02d %02d:%02d:%02d\n",
        tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
        tm->tm_hour, tm->tm_min, tm->tm_sec);

    return 0;
}

输出:

2010-02-11 15:58:29

工作原理如下。

  • 它调用time()以获得当前时间的最佳近似值(通常是自纪元以来的秒数,但标准并未实际规定)。
  • 然后调用localtime()将其转换为包含各个日期和时间字段的结构等。
  • 此时,您可以取消引用结构以获取您感兴趣的字段(tm_sec在您的情况下,但我已经展示了其中一些)。

请注意,如果您想要格林威治时间,也可以使用gmtime()代替localtime(),或者对于那些年纪太小的人来说,还可以使用UTC: - )。

答案 1 :(得分:2)

更便携的方法是将当前时间作为time_t结构:

time_t mytime = time((time_t*)0);

为此struct tm检索time_t

struct tm *mytm = localtime(&mytime);

检查tm_sec的{​​{1}}成员。根据您的C库,我们无法保证mytm的返回值基于自分钟开始以来的秒数。

答案 2 :(得分:2)

您可以使用gettimeofday(C11),time(Linux)或localtime_r(POSIX)获取当前时间;取决于什么日历&amp;你感兴趣的时代。您可以将其转换为日历纪元之后经过的秒数,或当前分钟的秒数,以您所使用的为准:

#include <stdio.h>
#include <string.h>
#include <time.h>

int main() {
    time_t current_secs = time(NULL);
    localtime_r(&current_secs, &current_time);

    char secstr[128] = {};
    struct tm current_time;
    strftime(secstr, sizeof secstr, "%S", &current_time);

    fprintf(stdout, "The second: %s\n", secstr);
    return 0;
}

答案 3 :(得分:1)

您想使用gettimeofday:

man 2 gettimeofday

#include <stdio.h>
#include <sys/time.h>

int main (int argc, char **argv)
{
  int iRet;
  struct timeval tv;

  iRet = gettimeofday (&tv, NULL); // timezone structure is obsolete
  if (iRet == 0)
  {
    printf ("Seconds/USeconds since epoch: %d/%d\n",
            (int)tv.tv_sec, (int)tv.tv_usec);
    return 0;
  }
  else
  {
    perror ("gettimeofday");
  }

  return iRet;
}

这比使用time(0)更好,因为你也获得了自动化的使用时间,这是更常见的用例。