線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4240
推到 Plurk!
推到 Facebook!

日期格式相加

答題得分者是:ddy
HomeSound
中階會員


發表:44
回覆:178
積分:94
註冊:2002-08-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-16 21:29:41 IP:61.30.xxx.xxx 未訂閱
請教白癡的笨問題: ShortDateFormat = "YYYY/MM/DD"; ShowMessage(DateToStr(StrToDate("2003/01/01")+ StrToDate("1/01/01"))); 答案 = 2104/01/04  這樣對嗎?  應是2004/02/05吧! 小弟不知日期格式相加時,還要設定啥東西? 與我想的邏輯不同 望各位教導一下? --==多看.多學.多聽==--
------
--==多看.多學.多聽==--
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-16 22:57:41 IP:61.221.xxx.xxx 未訂閱
引言: 請教白癡的笨問題: 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-16 23:46:45 IP:211.74.xxx.xxx 未訂閱
也是可以用     YearOf()     MonthOf()     DayOf() 來分解日期,相加後再轉換回日期        
HomeSound
中階會員


發表:44
回覆:178
積分:94
註冊:2002-08-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-17 11:50:28 IP:61.30.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-17 15:51:39 IP:203.73.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-17 17:35:24 IP:163.28.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-17 21:24:07 IP:211.74.xxx.xxx 未訂閱
    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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-17 21:36:51 IP:211.74.xxx.xxx 未訂閱
以下是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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-18 02:14:43 IP:61.30.xxx.xxx 未訂閱
三位老師都太棒了,卻不知給誰得分 隨便點,沒得分的老師勿怪喲!
------
--==多看.多學.多聽==--
系統時間:2024-04-19 19:15:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!