例如,我可以通过查看它们来计算这两个日期的差异,但我不知道在程序中计算这个日期。
日期:A为2014/02/12(y/m/d) 13:26:33
,B为2014/02/14(y/m/d) 11:35:06
,则小时数差异为46。
答案 0 :(得分:3)
我假设您的商店时间为字符串:"2014/02/12 13:26:33"
要计算您需要使用的时差:double difftime( time_t time_end, time_t time_beg);
函数difftime()
计算两个日历时间之间的差异为time_t
个对象(time_end - time_beg
),以秒为单位。如果time_end
指的是time_beg
之前的时间点,则结果为否定。现在问题是difftime()
不接受字符串。我可以分两步将字符串转换为time_t
中定义的time.h
结构,正如我在答案中所述:How to compare two time stamp in format “Month Date hh:mm:ss”:
使用char *strptime(const char *buf, const char *format, struct tm *tm);
将char*
时间字符串转换为struct tm
。
strptime()
函数使用format指定的格式将buf指向的字符串转换为存储在tm指向的tm结构中的值。要使用它,您必须使用文档中指定的格式字符串:
对于您的时间格式,我正在解释格式字符串:
所以函数调用如下:
// Y M D H M S
strptime("2014/02/12 13:26:33", "%Y/%m/%d %T", &tmi)
其中tmi
是struct tm
结构。
以下是我编写的代码(阅读评论):
#define _GNU_SOURCE //to remove warning: implicit declaration of ‘strptime’
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void){
char* time1 = "2014/02/12 13:26:33"; // end
char* time2 = "2014/02/14 11:35:06"; // beg
struct tm tm1, tm2; // intermediate datastructes
time_t t1, t2; // used in difftime
//(1) convert `String to tm`: (note: %T same as %H:%M:%S)
if(strptime(time1, "%Y/%m/%d %T", &tm1) == NULL)
printf("\nstrptime failed-1\n");
if(strptime(time2, "%Y/%m/%d %T", &tm2) == NULL)
printf("\nstrptime failed-2\n");
//(2) convert `tm to time_t`:
t1 = mktime(&tm1);
t2 = mktime(&tm2);
//(3) Convert Seconds into hours
double hours = difftime(t2, t1)/60/60;
printf("%lf\n", hours);
// printf("%d\n", (int)hours); // to display 46
return EXIT_SUCCESS;
}
编译并运行:
$ gcc -Wall time_diff.c
$ ./a.out
46.142500
答案 1 :(得分:1)
您可以使用difftime()计算C
中两次之间的差异。但是,它使用mktime
和tm
。
double difftime(time_t time1, time_t time0);
答案 2 :(得分:0)
mktime()应该做的工作
HTH