#27095: C/C++ tm, mktime解法


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a263. 日期差幾天 -- 板橋高中練習題 | From: [27.52.102.84] | 發表日期 : 2021-09-12 20:03

看了一下解題報告,似乎沒有人提到這個方法,如果你懶得手動計算日期,C語言有個結構叫做tm,可以像這樣用:

        struct tm tm1={0};
        tm1.tm_year=year-1900;
        tm1.tm_mon=month-1;
        tm1.tm_mday=day;

然後用mktime(&tm1)就能得到秒數。兩個秒數相減除86400就是日期差異

 
#27101: Re:C/C++ tm, mktime解法


406490150@gms.tku.edu.tw (我是朱朱)

學校 : 國立交通大學
編號 : 139794
來源 : [140.113.236.122]
最後登入時間 :
2022-09-03 11:13:16
a263. 日期差幾天 -- 板橋高中練習題 | From: [1.172.253.140] | 發表日期 : 2021-09-12 20:53

看了一下解題報告,似乎沒有人提到這個方法,如果你懶得手動計算日期,C語言有個結構叫做tm,可以像這樣用:

        struct tm tm1={0};
        tm1.tm_year=year-1900;
        tm1.tm_mon=month-1;
        tm1.tm_mday=day;

 

然後用mktime(&tm1)就能得到秒數。兩個秒數相減除86400就是日期差異


我有查到資料,酷耶!

https://www.cplusplus.com/reference/ctime/tm/

https://www.cplusplus.com/reference/ctime/mktime/

 

想請問為什麼直接秒數相減就可以是答案了呢?秒數的range只有0-60為何可以這樣操作?

 
#27104: Re:C/C++ tm, mktime解法


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a263. 日期差幾天 -- 板橋高中練習題 | From: [27.52.102.84] | 發表日期 : 2021-09-13 08:12

看了一下解題報告,似乎沒有人提到這個方法,如果你懶得手動計算日期,C語言有個結構叫做tm,可以像這樣用:

        struct tm tm1={0};
        tm1.tm_year=year-1900;
        tm1.tm_mon=month-1;
        tm1.tm_mday=day;

 

然後用mktime(&tm1)就能得到秒數。兩個秒數相減除86400就是日期差異


我有查到資料,酷耶!

https://www.cplusplus.com/reference/ctime/tm/

https://www.cplusplus.com/reference/ctime/mktime/

 

想請問為什麼直接秒數相減就可以是答案了呢?秒數的range只有0-60為何可以這樣操作?


我沒有說清楚,這裡的秒數指的是從1970年1月1日零點開始的秒數

https://www.cplusplus.com/reference/ctime/time_t/

 
#29806: Re:C/C++ tm, mktime解法


alex950301 (alex0301)

學校 : 新北市立新莊高級中學
編號 : 141423
來源 : [49.159.246.211]
最後登入時間 :
2024-10-19 20:13:44
a263. 日期差幾天 -- 板橋高中練習題 | From: [61.64.1.159] | 發表日期 : 2022-04-02 21:54

 

        tm1.tm_mon=month-1;
 


可以問一下為什麼要減掉1阿

 

 
#29807: Re:C/C++ tm, mktime解法


alex950301 (alex0301)

學校 : 新北市立新莊高級中學
編號 : 141423
來源 : [49.159.246.211]
最後登入時間 :
2024-10-19 20:13:44
a263. 日期差幾天 -- 板橋高中練習題 | From: [61.64.1.159] | 發表日期 : 2022-04-02 22:25

 

        tm1.tm_mon=month-1;
 


可以問一下為什麼要減掉1阿

 

 


算進去最後相差的量還是定值 會有誤差嗎

 

 
#29810: Re:C/C++ tm, mktime解法


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a263. 日期差幾天 -- 板橋高中練習題 | From: [39.8.200.239] | 發表日期 : 2022-04-03 06:28

 

        tm1.tm_mon=month-1;
 


可以問一下為什麼要減掉1阿

 

 


算進去最後相差的量還是定值 會有誤差嗎

 


減1是因為月分是從0開始算

第二句話看不懂你的意思

 
#29985: Re:C/C++ tm, mktime解法


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a263. 日期差幾天 -- 板橋高中練習題 | From: [110.26.168.226] | 發表日期 : 2022-04-18 14:53

看了一下解題報告,似乎沒有人提到這個方法,如果你懶得手動計算日期,C語言有個結構叫做tm,可以像這樣用:

        struct tm tm1={0};
        tm1.tm_year=year-1900;
        tm1.tm_mon=month-1;
        tm1.tm_mday=day;

 

然後用mktime(&tm1)就能得到秒數。兩個秒數相減除86400就是日期差異


有人詢問之後我才發現,如果年份在1970年之前,有些系統的函式庫會出現錯誤,似乎是因為c/c++標準只規定1970年之後的時間,雖然glibc支援我這種寫法,但是這是非標準的寫法。會介意的話就不要像我這樣寫。

 
ZeroJudge Forum