gpt4 book ai didi

delphi - Delphi 2010 中的编码时间问题

转载 作者:行者123 更新时间:2023-12-03 18:08:45 26 4
gpt4 key购买 nike

当我们使用 EncodeTime 函数 EncodeTime(wHour, wMinute, wSecond, wMilliseconds) 时,它不会将毫秒值分配给结果。

我们在下面使用编码日期和时间

Result := EncodeDate(wYear, wMonth, wDay) +
EncodeTime(wHour, wMinute, wSecond, wMilliseconds);

我们要解析为 DateTime 的字符串的值为 Apr 10 2008 7:21:31:460PM 但编码后我们得到的输出为 10/04/2008 07: 21:31

结果仅包含 HH:MM:SS 值,不包含毫秒值。

请让我们知道是否有格式化值并将其与毫秒一起存储在变量中。*******************我正在尝试的功能*************

function DateTimeParser(theString :string):TDateTime;
var wYear,wMonth,wDay,wHour, wMinute, wSecond,wMilliseconds : Word ;
Date,Month,Med :String;
Time : TDateTime;
testtime,testtime1 : TSystemTime;
var myDateTime : TDateTime;
begin
Month := Copy(theString,1,3) ;
if Month ='Jan' then wMonth := 01
else if Month ='Feb' then wMonth := 02
else if Month ='Mar' then wMonth := 03
else if Month ='Apr' then wMonth := 04
else if Month ='May' then wMonth := 05
else if Month ='Jun' then wMonth := 06
else if Month ='Jul' then wMonth := 07
else if Month ='Aug' then wMonth := 08
else if Month ='Sep' then wMonth := 09
else if Month ='Oct' then wMonth := 10
else if Month ='Nov' then wMonth := 11
else if Month ='Dec' then wMonth := 12
else ShowMessage('Not a Valid Month');
wYear := StrToInt(Copy(theString,8,4)) ;
wDay := StrToInt(Copy(theString,5,2)) ;
wHour := StrToInt(Copy(theString,13,2)) ;
wMinute := StrToInt(Copy(theString,16,2)) ;
wSecond := StrToInt(Copy(theString,19,2)) ;
wMilliseconds := StrToInt(Copy(theString,22,3)) ;

ShowMessage(IntToStr(wMilliseconds));

{if Copy(theString,25,2)= 'PM' then
wHour := wHour+12;}

Result := DateUtils.EncodeDateTime(wYear, wMonth, wDay,wHour, wMinute, wSecond, wMilliseconds);
//Result := Result+DateUtils.EncodeTime(wHour, wMinute, wSecond, wMilliseconds div 100);

myDateTime:= EncodeDate(2009,11,28)+EncodeTime(14,23,12,001);
ShowMessage(DatetimetoStr(myDateTime));
testtime1 := testtime;


Time :=EncodeTime(wHour, wMinute, wSecond, wMilliseconds);
ShowMessage(DateTimeToStr(Result));

**********************************************************************


end;

有什么想法吗?

最佳答案

我可能误解了这里的问题,但也许它正在存储,但您看不到它。调试器不显示毫秒,DateTimeToStr 也不显示。 FormatDateTime 带有格式字符串。

var
Date: TDateTime;
begin
Date := EncodeDateTime(2011, 02, 28, 20, 43, 10, 12);

//DateTimeToStr does not show milliseconds
ShowMessage(DateTimeToStr(Date));

//Use FormatDateTime with Format string
ShowMessage(FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz' , Date));
end;

数据库

您的 dbexpress 标记表明您正在尝试将 datetime 存储在数据库中。我不知道 dbexpress,但 ADO 会截断 datetime 中的毫秒数。 To save with milliseconds in SQL Server with ADO您必须自己构建插入语句。它可能与 dbexpress 相同。

下面是一些 ADO 代码,可以在 SQL Server 中以毫秒为单位保存 datetime

ADOCommand1.CommandText := 'insert into DateTbl values ('''+
FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz' , Date)+''')';
ADOCommand1.Execute;

SQL Server 中 datetime 的精度为 3.33 毫秒。这与在 Delphi 中不同,所以当我保存 2011-02-28 20:43:10.012 时,它被保存为 2011-02-28 20:43:10.013在 SQL Server 中。这对您来说可能是个问题。

一种解决方案是将 datetime 的毫秒部分存储在单独的整数列中。这样,您将始终存储在 Delphi 中编码的相同值,而不必构建自己的插入语句。

DBExpress

我已经对 DBX 组件进行了一些测试,它们也会截断毫秒数。

关于delphi - Delphi 2010 中的编码时间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5142756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com