日期處理問題(摘自演算法筆記)

2021-09-12 15:06:50 字數 1245 閱讀 1162

日期處理的問題總是會讓許多人頭疼,因為在這種問題中,總是會需要處理平年和閏年、大月和小月的問題,因此細節比較繁雜,但是只要細心處理細節,一般都可以解決。

有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的,則規定它們之間的天數為兩天。

有多組資料,每組資料有兩行,分別表示兩個日期,形式為yyyymmdd。

每組資料輸出一行,即日期差值。

20130101

20130105

不妨假設第乙個日期早於第二個日期(否則交換即可)。

這種求日期之間相差天數的題目有乙個很直接的思路。即令日期不斷加1天,直到第乙個日期等於第二個日期為止,即可統計出答案。具體處理時,如果當加了一天之後天數d等於當前月份m所擁有的天數加1,那麼就令月份m加1、同時置天數d為1號(即把日期變為下個月的1號);如果此時月份m變為了13,那麼就令年份y加1同時置月份m為1月(即把日期變為下一年的1月)。

為了方便直接取出每個月的天數,不妨給定乙個二維陣列int month[13][2],用來存放每個月的天數,其中第二維為0時表示平年,為1時表示閏年。

注意:如果想要加快速度,只需要先把第乙個日期的年份不斷加1 直到與第二個日期年份相差1為止,期間根據平年或是閏年來累加365天或者366天即可。

#include

int month[13]

[2]=

,,,,

,,,,

,,,,

};bool isleap

(int year)

intmain()

y1 = time1 /

10000

, m1 = time1 %

10000

/100

, d1 = time1 %

100;

y2 = time2 /

10000

, m2 = time2 %

10000

/100

, d2 = time2 %

100;

int ans =1;

// 記錄結果

// 第乙個日期沒有達到第二個日期時進行迴圈

while

(y1 < y2 || m1 < m2 || d1 < d2)

if(m1 ==13)

ans++;}

printf

("%d\n"

, ans);}

return0;

}

mysql日期處理問題

date format 字段,格式 常用的格式化字元 y 4位數字年份 2012 y 2位數字年份 12 m 完整英文月份名稱,january december b 月份名稱前三個字母,jan dec m 2位數字月份 01 12 c 最小位數字月份 1 12 d 2位數字日期 01 31 e 最小...

3 4 日期處理 問題 A 日期差值

有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的我們規定他們之間的天數為兩天。有多組資料,每組資料有兩行,分別表示兩個日期,形式為yyyymmdd 每組資料輸出一行,即日期差值 20130101 20130105 解題關鍵 求日期之間相差的天數,有乙個很直接的思路,即令日期不斷加一天,直到兩個...

下標處理問題

下標處理問題 主要是針對於插入排序演算法寫的程式,其他情況可以借鑑這些思路。數學上或者通常意義上,下標都是從1開始的,但是在多數程式語言裡面陣列下標都是從0開始的,這就很惱火了,簡單乙個下標處理起來卻異常麻煩!請看 例如 1 典型的陣列下標越界問題 假設有個陣列 a 0 a 1 我們要用插入法排序,...