在X分钟前获得X分钟的时间

时间:2013-08-11 11:49:58

标签: c time

我想打印当前时间和10分钟前的时间,但我不知道如何生成X分钟前的time_t ...

#include <time.h>

time_t current_time;
time_t tenMinutesAgo;

current_time = time(NULL);
tenMinutesAgo = ???;

printf("current time = %s, 10 minutes ago = %s\n",ctime(current_time),ctime(tenMinutesAgo));

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

由于time(NULL)返回1970年1月1日(或1970-01-01T00:00:00Z ISO 8601)epoch (usually the Unix epoch) 00:00:00 UTC的时间(以秒为单位)< /强>:

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

time_t current_time;
time_t tenMinutesAgo;

int main() {
  char* c_time_string;
  current_time = time(NULL);
  tenMinutesAgo = current_time - 10*60;//the time 10 minutes ago is 10*60

  c_time_string = ctime(&tenMinutesAgo);//convert the time tenMinutesAgo into a string format in the local time format

  printf("The time 10 minutes ago in seconds from the epoch is: %i\n", (int)tenMinutesAgo);
  printf("The time 10 minutes ago from the epoch in the local time format is: %s\n", c_time_string);

  return 0;
}

编辑:

@PaulGriffiths提出了一个很好的观点,即我的解决方案不能保证可移植性。如果您想要便携性,请检查他的答案。 ,如果你在任何最流行的操作系统风格(* nix,Solaris,Windows)上编写代码,这个解决方案都可以使用。

答案 1 :(得分:0)

第一个答案不保证是可移植的,因为C标准不要求在几秒钟内测量time_t

time_t是一个真实的类型,所以你可以对它进行算术运算,这确实为我们提供了实现它的途径。您可以每隔一秒设置两个struct tm

struct tm first;
struct tm second;
time_t ts_first;
time_t ts_second;
double sec_diff;

first.tm_year = 100;
first.tm_mon = 0;
first.tm_mday = 2;
first.tm_hour = 1;
first.tm_minute = 20;
first.tm_second = 20;
first.tm_isdst = -1;

second.tm_year = 100;
second.tm_mon = 0;
second.tm_mday = 2;
second.tm_hour = 1;
second.tm_minute = 20;
second.tm_second = 21;
second.tm_isdst = -1;

将它们转换为time_t值:

ts_first = mktime(&first);
if ( ts_first == -1 ) {
    /* Do your error checking  */
}

ts_second = mktime(&second);
if ( ts_second == -1 ) {
    /* Do your error checking  */
}

打电话给difftime()

sec_diff = difftime(ts_second, ts_first);

然后您可以将sec_diff乘以所需的秒数,并从time返回的值中减去该值。

当然,如果您的可用系统时间分辨率大于一秒,那么这不会起作用,您可以尝试更改tm_min成员,因为您正在寻找分钟,但是这不太可能。