gpt4 book ai didi

C 编程 - 计算 2 个日期时间的差异

转载 作者:行者123 更新时间:2023-11-30 16:48:34 26 4
gpt4 key购买 nike

我正在尝试使用getDateTime计算两个不同时间日期之间的差异:它应该是这样的:

输入日期和时间 (yyyy-mm-dd hh:mm:ss): 2017-03-13 12:00:00 Start: Mon Mar 13 12:00:00 2017

输入日期和时间 (yyyy-mm-dd hh:mm:ss): 2017-03-13 12:00:30 End: Mon Mar 13 12:00:30 2017

差异:30秒。

这是我的尝试:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int dayOfWeek(int d, int m, int y){
// Compute day of week: 0 Sun 1 Mon...6 Sat
int z;
if(m<3){
z=y;
y=y-1;
}
else z=y-2;
return (23*m/9 + d + z + 4 +
y/4- y/100 + y/400)%7;
}
int getDateTime(struct tm *t){
int year,month,day,hrs,min,sec;
printf("Enter date and time (yyyy-mm-dd hh:mm:ss): ");
scanf("%d-%d-%d", &year, &month, &day);
scanf("%d:%d:%d",&hrs,&min,&sec);
int x;
t->tm_year = year - 1900;
t->tm_mon = month - 1;
t->tm_mday = day;
t->tm_hour = hrs;
t->tm_min = min;
t->tm_sec = sec;
t->tm_wday = dayOfWeek(day,month,year);

return ;
}
int main()
{
setvbuf(stdout, NULL, _IONBF, 0);
struct tm Time1 , Time2;
double x;

getDateTime(&Time1);
printf("Start: %s", asctime(&Time1));
getDateTime(&Time2);
printf("End: %s", asctime(&Time2));


return EXIT_SUCCESS;
}

我能够以正确的格式打印它,但是如何计算以秒为单位的差异?我尝试使用 difftime 但我认为我用错了。非常感谢 !

最佳答案

已经有一个解析日期的函数,strptime。这就像日期的 scanf 一样。它遵循与 strftime 相同的格式代码。 (p 表示解析,f 表示格式)。

你可以用长手来做。

struct tm date;
strptime( "2017-03-13 12:00:00", "%Y-%m-%s %H:%M:%S", &date );

或者使用为 ISO 8601 日期和时间提供的短指针。

struct tm date;
strptime( "2017-03-13 12:00:00", "%F %T", &date );

它取代了getDateTime

<小时/>

完成后,您将得到 struct tm 形式的日期,您可以将它们转换为自纪元 (1970-01-01 00:00:00 UTC) 以来的秒数并减去。使用 mktime 转换为自纪元 time_t 以来的秒数。然后用difftime减去。

time_t seconds1 = mktime(&date1);
time_t seconds2 = mktime(&date2);
double timediff = difftime( seconds1, seconds2 );

不过,老实说,您也可以只秒1 - 秒2difftime 被添加到标准中,以允许 time_t 不再是一个简单的数字,但据我所知没有这样的实例。

mktime 假定日期位于本地时区。对于区分同一时区的两个日期来说,这并不重要。

如果是,则存在非标准函数 timegm ,这是 mktime 但它假设它们是 UTC 日期。或者您可以使用 POSIX 函数 setenvtzset 编写自己的函数来临时更改时区。

time_t my_timegm(struct tm *date) {
// Store the current TZ value.
char *tz = getenv("TZ");

// Unset TZ which will cause UTC to be used.
setenv("TZ", "", 1);
tzset();

// Call mktime, now in UTC.
time_t time = mktime(date);

// Restore the TZ environment variable (or leave it unset).
if (tz)
setenv("TZ", tz, 1);
else
unsetenv("TZ");
tzset();

return time;
}

关于C 编程 - 计算 2 个日期时间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42918686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com