在C中获取X分钟前的时间

在C中获取X分钟前的时间,c,time,C,Time,我想打印当前时间和10分钟前的时间,但我不知道如何生成X分钟前的时间 #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)); #包括

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

#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));
#包括
时间t当前时间;
时间十分钟前;
当前时间=时间(空);
十分钟前=???;
printf(“当前时间=%s,10分钟前=%s\n”,ctime(当前时间),ctime(十分钟前));
任何帮助都将不胜感激

因为
时间(NULL)
返回1970年1月1日UTC时间00:00:00(或1970-01-01T00:00:00Z ISO 8601)的时间(以秒为单位):

#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;
}
#包括
#包括
时间t当前时间;
时间十分钟前;
int main(){
char*c_time_字符串;
当前时间=时间(空);
十分钟前=当前时间-10*60;//十分钟前的时间是10*60
c_time_string=ctime(&tenMinutesAgo);//将时间tenMinutesAgo转换为本地时间格式的字符串格式
printf(“以秒为单位的10分钟前的时间是:%i\n”,(int)十分钟前);
printf(“在本地时间格式中,距历元10分钟前的时间为:%s\n”,c_time_string);
返回0;
}
编辑:

@PaulGriffiths提出了一个很好的观点,我的解决方案不能保证是可移植的。如果你想要便携性,那么检查他的答案但是,如果您在最流行的操作系统风格(*nix、Solaris、Windows)上编写代码,此解决方案将起作用。

因为
时间(NULL)
返回1970年1月1日协调世界时00:00:00(或1970-01-01T00:00:00Z ISO 8601)的时间(秒):

#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;
}
#包括
#包括
时间t当前时间;
时间十分钟前;
int main(){
char*c_time_字符串;
当前时间=时间(空);
十分钟前=当前时间-10*60;//十分钟前的时间是10*60
c_time_string=ctime(&tenMinutesAgo);//将时间tenMinutesAgo转换为本地时间格式的字符串格式
printf(“以秒为单位的10分钟前的时间是:%i\n”,(int)十分钟前);
printf(“在本地时间格式中,距历元10分钟前的时间为:%s\n”,c_time_string);
返回0;
}
编辑:


@PaulGriffiths提出了一个很好的观点,我的解决方案不能保证是可移植的。如果你想要便携性,那么检查他的答案但是,如果您在最流行的操作系统风格(*nix、Solaris、Windows)上编写代码,此解决方案将起作用。

第一个答案不能保证是可移植的,因为C标准不要求以秒为单位测量时间

time\u t
是一种实数类型,因此您可以对其进行算术运算,这确实为我们提供了一条执行此操作的路线。您可以每隔一秒钟设置两个
struct tm
s:

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
返回的值中减去它


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

第一个答案不保证可移植,因为C标准不要求以秒为单位测量时间

time\u t
是一种实数类型,因此您可以对其进行算术运算,这确实为我们提供了一条执行此操作的路线。您可以每隔一秒钟设置两个
struct tm
s:

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
返回的值中减去它


当然,如果您的可用系统时间分辨率大于1秒,这将不起作用,您可以尝试更改
tm_min
成员,因为您正在查找分钟数,但这不太可能。10分钟大约是多少秒?你知道怎么做减法吗?:-)哇!那很简单啊:)谢谢!我会更新代码。10分钟大约是多少秒?你知道怎么做减法吗?:-)哇!那很简单啊:)谢谢!我将更新代码。请注意,解决方案可能不可移植,因为C标准不要求以秒为单位测量时间。@PaulGriffiths:已编辑。请注意,解决方案可能不可移植,因为C标准不要求以秒为单位测量时间。@PaulGriffiths:Edited。我不知道C标准,但声明“time()函数将返回自历元以来的时间值(以秒为单位)”,以及“time\t:用于以秒为单位的时间”。所以(目前)被接受的解决方案在我看来是非常可移植的。@MartinR:如果你不需要完全标准的东西,那就好了,大多数现代桌面系统都会这样实现它,但是C标准说“第7.27.1.4节中规定了
时钟
时间
中可表示的时间范围和精度。C11还有
timespec\u get()
,这可能也会有帮助。我不知道C标准,但声明“time()函数将返回自历元以来的时间值(以秒为单位)”,以及:“time\u t:用于时间(以秒为单位)”。所以(目前)被接受的解决方案在我看来是非常可移植的。@MartinR:如果你不需要完全标准的东西,那就好了,大多数现代桌面系统都会这样实现它,但是C标准说“第7.27.1.4节中规定了
时钟
时间
中可表示的时间范围和精度。C11还有
timespec\u get()
,这可能也很有用。