我知道如何在Delphi中使用encodedate将单个YY,MM和DD编码为日期时间字段,或者使用encodetime将单个HH,SS,MM和MS编码为datetime字段,但有没有办法指定日期和时间进入日期时间字段?
Coz with encodedate我无法指定时间和编码时间我无法指定日期......
e.g。如何设置日期时间字段为2009-11-28 14:23:12.000
请帮忙。
感谢。
答案 0 :(得分:31)
尝试使用DateUtils单元中声明的EncodeDateTime函数。
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它存储为Double(TDateTime = type Double;
),日期为整数部分(EncodeDate函数返回积分)和时间作为小数部分。
TDateTime的日期部分表示自18/30/1899以来经过的天数。一个TDateTime可以是截至9月31日的任何日期(十进制值2,958,465),TDateTime值也可以是负数。十进制值-693593对应于0001年1月1日。
参见这些例子
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;
embarcadero网站的重要提示:
查找小数天数 在两个日期之间,简单地减去 两个值,除非其中一个 System.TDateTime值为负数。 同样,增加日期和 时间值由一定的分数 天数,加上小数 数字到日期和时间值if System.TDateTime值是 正。
使用否定时 System.TDateTime值,计算 必须单独处理时间部分。 小数部分反映了 没有的24小时一天的分数 关于的标志 System.TDateTime值。例如, 1899年12月29日上午6点是-1.25,而不是-1 + 0.25,这将是-0.75。之间没有System.TDateTime值 -1和0。
有关其他信息,您可以看到此链接
答案 1 :(得分:0)
Embarcadero声明:在-1和0之间没有System.TDateTime值。
即使是Embarcadero似乎也不知道。它在Delphi 7的帮助文件中也是一个错误
应该是,在0和1之间没有System.TDateTime值。
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