在C中获取X分钟前的时间
我想打印当前时间和10分钟前的时间,但我不知道如何生成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)); #包括
#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()
,这可能也很有用。