我一直在搜索很多關於如何使用C在兩個日期之間的月份中獲得差異,但我無法解決它。所以我想我簡單地開始瞭解它並從那裏開始。C計算日期之間的差異
一些我見過的例子大廈應該計算兩個日期之間的時間,這是我想出了代碼:
#define _XOPEN_SOURCE
#include <time.h>
#include <stdio.h>
int main()
{
char *time1 = "2015-08-10";
char *time2 = "2017-05-16";
struct tm tm1;
struct tm tm2;
time_t t1;
time_t t2;
double hours;
strptime(time1, "%Y-%m-%d", &tm1);
strptime(time2, "%Y-%m-%d", &tm2);
printf("time1: %s\n", time1);
printf("tm1.year: %d\n", tm1.tm_year);
printf("tm1.mon : %d\n", tm1.tm_mon);
printf("tm1.day : %d\n", tm1.tm_mday);
printf("time2: %s\n", time2);
printf("tm2.year: %d\n", tm2.tm_year);
printf("tm2.mon : %d\n", tm2.tm_mon);
printf("tm2.day : %d\n", tm2.tm_mday);
t1 = mktime(&tm1);
t2 = mktime(&tm2);
hours = difftime(t2, t1)/60/60;
printf("diff: %lf\n", hours);
return 0;
}
它編譯和運行,但它給了我不同每次我執行它幾小時?不明白爲什麼?
編譯:
$ gcc -Wall main.c -o timespan
和處決:
$ ./timespan
time1: 2015-08-10
tm1.year: 115
tm1.mon : 7
tm1.day : 10
time2: 2017-05-16
tm2.year: 117
tm2.mon : 4
tm2.day : 16
diff: -1885271229.700556
$ ./timespan
time1: 2015-08-10
tm1.year: 115
tm1.mon : 7
tm1.day : 10
time2: 2017-05-16
tm2.year: 117
tm2.mon : 4
tm2.day : 16
diff: -652404645.977222
嘗試%f而不是%lf。 –
如果目標是計算兩個日期之間的月份,那麼用「手工」完成一個簡單的月份和年份運算的減法不是更簡單嗎?更大的問題是如何根據當天舍入到最近的月份,因爲這不是每月不變的。 「月」不是確切的度量單位。 –
好奇,爲什麼給2 _dates_,代碼是否需要生成_hour_差異而不是_day_差異?是否有DST關注? – chux