1、decodedate
proceduretform1.button1click(sender: tobject);
var
wyear1,wyear2,wmonth1,wmonth2,wday1,wday2:word;
wyeardiff,wmonthdiff:integer;
date1,date2:string;
begin
date1:='2009-12-01';
date2:='2010-02-01';
decodedate(strtodatetime(date1),wyear1,wmonth1,wday1);
decodedate(strtodatetime(date2),wyear2,wmonth2,wday2);
wyeardiff:=wyear2-wyear1;
wmonthdiff:=(wmonth2-wmonth1)+wyeardiff*12;
showmessage(inttostr(wmonthdiff)); //得到的結果是2
end;
2、monthsbetween(求法不准)
proceduretform1.button2click(sender: tobject);
var
date1,date2,date3,date4:string;
i,j:integer;
begin
date1:='2009-12-01';
date2:='2010-02-01';
date3:='2010-01-01';
date4:='2010-03-01';
i:=monthsbetween(strtodatetime(date1),strtodatetime(date2));
j:=monthsbetween(strtodatetime(date3),strtodatetime(date4));
showmessage(inttostr(i)); //得到的結果是2
showmessage(inttostr(j)); //得到的結果是1
end;
按道理的話,都應該得到2。
原因是這個是delphi的bug,他的時間是按照乙個月30.4375幾來除的,就是先取到daysbetween,即相隔多少天再除這個值,所以不准的,yearsbetween也不准,是除365.25幾按一年來除。這2個有bug,需要算具體的你還是自己寫吧。
所以 求月份之差應用方法一
SQL求月份累計
1月100,2月200,3月100,4月200.統計如下效果 1月100,2月300,3月500,4月600.就是每月統計一次前面所有的月的總額 直接上sql啦 select month,amount,sum amount over order by month asc from expense s...
C 類實現求兩個日期之差
這篇部落格是剛接觸c 的小白寫的第一篇部落格。下面是本小白寫完這題所得 1 類可以完全覆蓋結構體 2 在類外應用 類名 函式名 的形式定義類中的public型成員 3 注意好第2點用類寫函式真的很便利 4 函式頭中的形參也算乙個新的物件 問題描述 宣告乙個表示時間的類ctime,可以精確表示年 月 ...
在SqlServer中求日期月份的天數
如下 輸出 31 基本思路 要求乙個月的天數,先獲得這個月的年份和月份,在月份上加1,然後將年份 月份和 01 進行拼接,求出下個月第一天的日期 然後在該日期上 1,得到本月最後一天的日期 最有通過day 求得最後一天日期的天對應的數字,該數字即為本月的天數。一下看這個 似乎有點暈,我們來分解一下這...