0

我想在 C 中从特定日期转换为秒。例如,如果我给出 2015 年 12 月 25 日,它将转换为秒。这是我发现的将当前日期转换为秒的程序。但我想从特定日期转换为秒。

time_t timer;
  struct tm y2k;
  double seconds;

  y2k.tm_hour = 0;   y2k.tm_min = 0; y2k.tm_sec = 0;
  y2k.tm_year = 0; y2k.tm_mon = 0; y2k.tm_mday = 1;

  time(&timer);  

  seconds = difftime(timer,mktime(&y2k));

  printf ("%.f ", seconds); 
4

3 回答 3

0

结果mktime()是自 1970 年 1 月 1 日午夜 00:00:00 UTC 以来的秒数(给定或取几闰秒)。

这也称为Unix 时间

于 2014-03-15T13:55:27.387 回答
0

阅读关于 tm 结构的手册页 ( http://www.cplusplus.com/reference/ctime/tm/ )。2015 年 12 月 25 日,

y2k.tm_year = 2015 - 1900; /* Starts from 1900 */
y2k.tm_mon = 12 - 1; /* Jan = 0 */
y2k.tm_mday = 15;

此外,要打印双精度,请使用 %lf。如果你只使用 %f,你可能得不到你想要的结果。

于 2014-03-15T14:12:58.523 回答
0

您可能还会发现strptime(3)很有用。

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

int
main(int ac, char *av[])
{
    char format[] = "%m/%d/%y";
    char input[] = "12/25/15";
    char buf[256];
    struct tm tm;

    memset(&tm, 0, sizeof tm);

    if (strptime(input, format, &tm) == NULL) {
         fputs("strptime failed\n", stderr);
         return 1;
    }

    strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &tm);

    printf("reformatted: %s; as time_t: %ld\n", buf, mktime(&tm));

    return 0;
}
于 2014-03-15T14:31:55.377 回答