我知道如何使用Delphi中的編碼器將單個YY,MM和DD編碼到日期時間字段中或使用編碼時間將個別HH,SS,MM和MS編碼到日期時間字段中,但是有沒有將日期和時間指定到日期時間字段的方法?如何在delphi中編碼日期時間
堂妹與encodedate我不能指定的時間和encodetime我不能指定日期...
例如我怎麼可以設置一個日期字段2009-11-28 14:23:12.000
請幫助。
謝謝。
我知道如何使用Delphi中的編碼器將單個YY,MM和DD編碼到日期時間字段中或使用編碼時間將個別HH,SS,MM和MS編碼到日期時間字段中,但是有沒有將日期和時間指定到日期時間字段的方法?如何在delphi中編碼日期時間
堂妹與encodedate我不能指定的時間和encodetime我不能指定日期...
例如我怎麼可以設置一個日期字段2009-11-28 14:23:12.000
請幫助。
謝謝。
嘗試使用EncodeDateTime函數在DateUtils單元declarated。
function EncodeDateTime(const AYear: Word;
const AMonth: Word;
const ADay: Word;
const AHour: Word;
const AMinute: Word;
const ASecond: Word;
const AMilliSecond: Word): TDateTime;
參見本實施例中
uses
DateUtils;
var
myDateTime : TDateTime;
begin
//Your Code
myDateTime := EncodeDateTime(2009, 11, 28, 14, 23, 12, 000);
//Your Code
End;
另一個選項
uses
SysUtils;
var
myDateTime : TDateTime;
begin
//Your Code
myDateTime:= EncodeDate(2009,11,28)+EncodeTime(14,23,12,000);
//Your Code
end;
第二種選擇工作,因爲該TDatetime據存儲爲雙(TDateTime = type Double;
),與該日期作爲積分部分(EncodeDate函數返回積分),時間爲小數部分。
的TDateTime類型的日期部分表示自12/30/1899已經過去的天數。 TDateTime類型可以通過12月31日9999(十進制值2958465)的任何日期,TDateTime類型值也可以是負數。十進制值-693593對應於1月1日0001
看到Embarcadero公司網站
var
myDateTime : TDateTime;
Begin
myDateTime :=0; //represents 12/30/1899
myDateTime :=1; //represents 12/31/1899
myDateTime :=-1; //represents 12/29/1899
myDateTime :=-693593; //represents 01/01/0001
myDateTime := Now(); //assign the current date and time to myDateTime
myDateTime:=Trunc(Now()); //Extract only the date part.
myDateTime:=Frac(Now()); //Extract only the time part.
myDateTime :=Now() + 1;// Add a day to the current datetime
End;
重要提示論文的例子:
找到兩個日期之間的小數天 的,簡單地減去 兩個值,除非 System.TDateTime值中的一個是負的。 同樣,要將日期和 時間值增加一定的分數 天數,請將分數 數字添加到日期和時間值(如果 System.TDateTime值爲 爲正數)。
當與負 System.TDateTime值工作,計算 必須處理時間部分分別。 小數部分反映而不 關於 System.TDateTime值的符號的 餾分24小時的一天。例如, 上午6:00 1899年12月29日是-1.25,不是-1 + 0.25,這將是-0.75。有 -1和0之間沒有System.TDateTime值。
對於addtional信息,你可以看到這個鏈接
Embarcadero的規定:有介於-1和0
即使Embarcadero公司確實沒有System.TDateTime值似乎不知道。這也是從德爾福7在他們的幫助文件中的錯誤
它應該是,有沒有System.TDateTime值0和1之間
dateValue := EncodeDate(1899,12,30);
timeValue := EncodeTime(0,0,1,1);
dateTimeValue := dateValue-timeValue;
dateTimeValue := -1,1585648148e-05
DateTimeToStr(dateTimeValue) -> 30-12-1899 0:00:01
dateValue := EncodeDate(1899,12,30);
timeValue := EncodeTime(23,59,59,999);
dateTimeValue := dateValue-timeValue;
dateTimeValue := -0,99999998843
DateTimeToStr(dateTimeValue) -> 30-12-1899 23:59:59
dateValue := EncodeDate(1899,12,31);
timeValue := EncodeTime(0,0,0,0);
dateTimeValue := dateValue-timeValue;
dateTimeValue := 1
DateTimeToStr(dateTimeValue) -> 31-12-1899
dateValue := EncodeDate(1899,12,31);
timeValue := EncodeTime(0,0,0,0);
dateTimeValue := dateValue+timeValue;
dateTimeValue := 1
DateTimeToStr(dateTimeValue) -> 31-12-1899
dateValue := EncodeDate(1899,12,31);
timeValue := EncodeTime(0,0,0,1);
dateTimeValue := dateValue+timeValue;
dateTimeValue := 1,0000000116
DateTimeToStr(dateTimeValue) -> 31-12-1899
dateValue := EncodeDate(1899,12,31);
timeValue := EncodeTime(23,59,59,999);
dateTimeValue := dateValue+timeValue;
dateTimeValue := 1,99999998843
DateTimeToStr(dateTimeValue) -> 31-12-1899 23:59:59
如果你解釋,我會投票這件事*爲什麼*的第二個選項有效,爲什麼這樣做是安全的。如果OP知道他不需要問。引用雷蒙德陳:「如果你不明白爲什麼應該做什麼,那麼你已經陷入了貨物崇拜節目的陷阱」(http://blogs.msdn.com/oldnewthing/archive/2009/11/ 04/9917052.aspx) – mghie 2009-11-19 05:20:18
第二個選項不起作用,並且不安全:-) * *將*在* 12/30/1899之後的日期*上工作,但不在之前的日期(編碼爲負雙) – 2009-11-19 07:33:05
+1偉大而詳細的答案 – jpfollenius 2009-11-19 09:02:29