如何在delphi中编码日期时间

时间:2009-11-19 04:45:07

标签: delphi datetime

我知道如何在Delphi中使用encodedate将单个YY,MM和DD编码为日期时间字段,或者使用encodetime将单个HH,SS,MM和MS编码为datetime字段,但有没有办法指定日期和时间进入日期时间字段?

Coz with encodedate我无法指定时间和编码时间我无法指定日期......

e.g。如何设置日期时间字段为2009-11-28 14:23:12.000

请帮忙。

感谢。

2 个答案:

答案 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