我想打印当前时间和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));
非常感谢任何帮助!
答案 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
成员,因为您正在寻找分钟,但是这不太可能。