日期格式相加 |
答題得分者是:ddy
|
HomeSound
中階會員 發表:44 回覆:178 積分:94 註冊:2002-08-31 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 請教白癡的笨問題: ShortDateFormat = "YYYY/MM/DD"; ShowMessage(DateToStr(StrToDate("2003/01/01") StrToDate("1/01/01"))); 答案 = 2104/01/04 這樣對嗎? 應是2004/02/05吧! 小弟不知日期格式相加時,還要設定啥東西? 與我想的邏輯不同 望各位教導一下? >>< face="Verdana, Arial, Helvetica">HomeSound 你好: (1)我沒有用這種方式做過日期、時間的相加或相減,因此,我不打算猜測你的 做法的問題所在 ( > >>>>>> 備註: (
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
HomeSound
中階會員 發表:44 回覆:178 積分:94 註冊:2002-08-31 發送簡訊給我 |
RaynorPao 大大小弟的BCB5找不到IdDateTimeStamp.hpp
您的方法很棒,小弟卻無緣TEST,
小弟是希望若2004/02/29 23:59 2分鐘後=2004/03/01 00:01
或2003/12/31 23:59 2分鐘後=2004/01/01 00:01
跨年怕會出錯,我只有笨方法把年.月.日.時.分.通通拆開
算成60進位,24進位,30&31進位,12進位,潤年2月又不一樣
這種的東西進銷存應該會常常用到才對,有寫好的函數吧!
一定有比小弟更好的方法.
ddy大大那分解開來再相加,會自動跨年跨月嗎??
感謝兩位前輩的指導. 謝謝您喲! --==多看.多學.多聽==--
------
--==多看.多學.多聽==-- |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: RaynorPao 大大小弟的BCB5找不到IdDateTimeStamp.hpp 您的方法很棒,小弟卻無緣TEST, 小弟是希望若2004/02/29 23:59 2分鐘後=2004/03/01 00:01 或2003/12/31 23:59 2分鐘後=2004/01/01 00:01 跨年怕會出錯,我只有笨方法把年.月.日.時.分.通通拆開 算成60進位,24進位,30&31進位,12進位,潤年2月又不一樣 這種的東西進銷存應該會常常用到才對,有寫好的函數吧! 一定有比小弟更好的方法. ddy大大那分解開來再相加,會自動跨年跨月嗎?? 感謝兩位前輩的指導. 謝謝您喲! HomeSound 你好: (1)最新版的 Indy 元件及其說明文件,可以到以下連結下載 http://www.indyproject.org/dowload/Indy9.html (2)如果安裝有問題的話,可以參考以下的連結文章 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25182-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
yannyann
一般會員 發表:8 回覆:20 積分:10 註冊:2003-02-17 發送簡訊給我 |
引言: RaynorPao 大大小弟的BCB5找不到IdDateTimeStamp.hpp 您的方法很棒,小弟卻無緣TEST, 小弟是希望若2004/02/29 23:59 2分鐘後=2004/03/01 00:01 或2003/12/31 23:59 2分鐘後=2004/01/01 00:01 跨年怕會出錯,我只有笨方法把年.月.日.時.分.通通拆開 算成60進位,24進位,30&31進位,12進位,潤年2月又不一樣 這種的東西進銷存應該會常常用到才對,有寫好的函數吧! 一定有比小弟更好的方法. ddy大大那分解開來再相加,會自動跨年跨月嗎?? 感謝兩位前輩的指導. 謝謝您喲!如果只是要加天與分鐘.. 可以直接用加的.. TDateTime DT=StrToDateTime("2003/12/31 23:59"); Edit1->Text=DateTimeToStr(DT 2.75); 結果是 2004/1/3 PM 05:59:00 2.75 表示2.75天.. |
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
implementation uses DateUtils; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var d:TDate; begin d:=StrToDate('2002/1/1'); d:=IncYear(d,2); d:=IncDay(d,5); d:=IncMonth(d,30); self.Caption :=datetostr(d); //2006/7/6 end;HomeSound 上面這此函式是D7 DateUtils 雖然你是用bcb 5,也參考看看 < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=8147403&CC=182217"> 發表人 - ddy 於 2003/03/17 21:29:45 |
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
以下是D7 的function,供你參考,改成bcb 5 ^_____^
const DaysPerWeek = 7; WeeksPerFortnight = 2; MonthsPerYear = 12; function IncDay(const AValue: TDateTime; const ANumberOfDays: Integer): TDateTime; begin Result := AValue + ANumberOfDays; end; procedure IncAMonth(var Year, Month, Day: Word; NumberOfMonths: Integer = 1); var DayTable: PDayTable; Sign: Integer; begin if NumberOfMonths >= 0 then Sign := 1 else Sign := -1; Year := Year + (NumberOfMonths div 12); NumberOfMonths := NumberOfMonths mod 12; Inc(Month, NumberOfMonths); if Word(Month-1) > 11 then // if Month <= 0, word(Month-1) > 11) begin Inc(Year, Sign); Inc(Month, -12 * Sign); end; DayTable := @MonthDays[IsLeapYear(Year)]; if Day > DayTable^[Month] then Day := DayTable^[Month]; end; function IncMonth(const DateTime: TDateTime; NumberOfMonths: Integer): TDateTime; var Year, Month, Day: Word; begin DecodeDate(DateTime, Year, Month, Day); IncAMonth(Year, Month, Day, NumberOfMonths); Result := EncodeDate(Year, Month, Day); ReplaceTime(Result, DateTime); end; function IncYear(const AValue: TDateTime; const ANumberOfYears: Integer): TDateTime; begin Result := IncMonth(AValue, ANumberOfYears * MonthsPerYear); end; |
HomeSound
中階會員 發表:44 回覆:178 積分:94 註冊:2002-08-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |