我正在尝试编写一个函数Tdatetime(但是当我打开我的程序时,他必须现在显示数据)
下面我有一个功能,TDatetime但我有一个错误:
(((('''DecodeDateTime(data,rok,miesiac,dzien,godzina,minuta,sekunda,milisekunda);''))))
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Buttons;
type
TForm1 = class(TForm)
edRok: TSpinEdit;
edMiesiac: TSpinEdit;
edDzien: TSpinEdit;
lbRok: TLabel;
lbMiesiac: TLabel;
lbDzien: TLabel;
lbDT: TLabel;
btnZamknij: TBitBtn;
procedure edRokChange(Sender: TObject);
procedure edDzienChange(Sender: TObject);
procedure DecodeDate(Date: TDateTime);
function DT(Dzien, Miesiac: Byte; Rok: Integer): Byte;
function GetDzienText(Dt: Byte): String;
function Now: TDateTime;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1; …Run Code Online (Sandbox Code Playgroud) 当我们使用EncodeTime函数EncodeTime(wHour,wMinute,wSecond,wMilliseconds)时,它不会将millisec值赋给Result.
我们在下面用它来编码日期和时间
Result := EncodeDate(wYear, wMonth, wDay) +
EncodeTime(wHour, wMinute, wSecond, wMilliseconds);
Run Code Online (Sandbox Code Playgroud)
我们要解析为DateTime的String具有值,Apr 10 2008 7:21:31:460PM但在编码之后我们得到输出为10/04/2008 07:21:31.
结果仅包含HH:MM:SS值而不包含毫秒值.
如果有格式化值并将其与millisec一起存储在变量中,请告诉我们. *******************我正在尝试的功能*************
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 …Run Code Online (Sandbox Code Playgroud) 该程序是数据库和应用程序之间的中间件.对于每个数据库访问,我大多数以毫秒为单位计算时间长度.下面的示例是使用Builder库中的TDateTime.我必须尽可能只使用标准的c ++库.
Run Code Online (Sandbox Code Playgroud)AnsiString TimeInMilliseconds(TDateTime t) { Word Hour, Min, Sec, MSec; DecodeTime(t, Hour, Min, Sec, MSec); long ms = MSec + Sec * 1000 + Min * 1000 * 60 + Hour * 1000 * 60 * 60; return IntToStr(ms); }
// computing times
TDateTime SelectStart = Now();
sql_manipulation_statement();
TDateTime SelectEnd = Now();
Run Code Online (Sandbox Code Playgroud) 我在Delphi 2010中创建了一个简单的表单,在我输入的按钮的代码中只有一个按钮:
procedure TForm1.Button1Click(Sender: TObject);
var
myDateTime:TDateTime;
begin
myDateTime:=now; // shows as 12/30/99 in debugger
end;
Run Code Online (Sandbox Code Playgroud)
当我在Delphi XE2中运行这个完全相同的代码时,我得到myDateTime值的当前日期/时间.
我想我必须在Delphi 2010项目环境中设置错误,但不能想到它可能是什么.
任何帮助将非常感激.
谢谢!
发现的问题,编译器设置是将代码生成优化设置为true,并且该值显然表示为TDateTime的默认值.当我将优化设置更改为false时,我可以看到该值.
有没有办法检查Delphi TDateTime变量是否具有有效内容而不捕获转换上的异常?
我编写了一个应用程序,必须解析数百个包含TDateTime字段的原始Delphi记录的大文件.偶尔我会得到一条记录,其内容的TDateTime值如2.0927117954e + 262,它Floating point invalid Operation在传递给转换例程时会产生异常.我知道我可以简单地捕获异常,但这在调试时会非常麻烦,因为调试器会一直停止,我想在其他错误的情况下保持启用状态.
如何在 TDateTime 中转换 TValue?
我看到有 AsInteger、AsDouble 等方法,但 TDateTime 没有。
var
c : TRttiContext;
t : TRttiType;
f : TRttiField;
fieldValue : TValue;
fieldDateValue : TDateTime;
begin
c := TRttiContext.Create;
t := c.GetType(Self.ClassType);
for f in t.GetFields do begin
fieldValue := field.GetValue(Self);
//convert the TValue in TDateTime
end;
end;
Run Code Online (Sandbox Code Playgroud) 我是Delphi编程新手.虽然经历了Data Types在Delphi我发现TDateTime.
在我的测试应用程序中使用它时,我发现TDateTimeObject提供了一个Float\Double值.
我感到有点好奇TDateTime它是如何计算的Date Time,以Double价值.
下面是我使用的示例代码:
var
LDateTime: TDateTime;
LFloat: Double;
begin
LDateTime := now;// current DateTime
LFloat:= LDateTime; // provide me a float value
end;
Run Code Online (Sandbox Code Playgroud)
是否使用任何公式Date and Time Value从Windows 计算?
任何人都可以建议/提供有关工作的更多信息TDateTime吗?
提前致谢.
var MyDate:TDate;
MyDate:=Date;
Run Code Online (Sandbox Code Playgroud)
如何将本地 myDate 转换为我的格式:31/12/2011?
RecodeDate?
谢谢!!!
我需要使用 C++ 将一个双精度值的 Pascal TDateTime 对象转换为 Unix 纪元。
提出了一个可能的解决方案(https://forextester.com/forum/viewtopic.php?f=8&t=1000):
unsigned int UnixStartDate = 25569;
unsigned int DateTimeToUnix(double ConvDate)
{
return((unsigned int)((ConvDate - UnixStartDate) * 86400.0));
}
Run Code Online (Sandbox Code Playgroud)
但是,此转换代码会产生错误,例如:
TDateTime 时间值 = 37838.001388888886 (05.08.2003 02:00)
转换为 Unix 纪元 1060041719 (05.08.2003 00:01:59) 这显然是不正确的。
如何准确地转换此 TDateTime 值?
在查看System.pas时,TDate和TDateTime定义如下:
TDateTime = type Double;
TDate = type TDateTime;
TTime = type TDateTime;
Run Code Online (Sandbox Code Playgroud)
显然TDate和TDateTime是一样的.
我只是努力与TDate和TDateTime合作,因为我预计TDate只包含日期部分,而不是时间部分.
现在我想知道:这背后的意义是什么?当我将变量声明为TDate时,它应该包含一个日期,而不是一个数据和一个时间值.
我正忙着用 Delphi 11.3 编写一个与时间兼容的程序。具体来说,是开始时间和结束时间,并计算两者之间花费的时间,以及其中一个是否大于另一个。
MinutesBetween()尽管使用了or ,事情还是变得一团糟MinuteSpan()。我的开始时间可能是08:00我的结束时间09:30。如果我使用if start < end,我会得到 False 但它是 True 。计算所花费的时间相当于100多年。像这样的奇怪的事情。
作为测试,我编写了一个小程序,代码如下:
mmo1.Lines.Add(FormatDateTime('yyyy/mm/dd hh:nn:ss.zzz',tmpckr1.Time)+' '
+FormatDateTime('yyyy/mm/dd hh:nn:ss.zzz',tmpckr2.Time)+' '
+IntToStr(MinutesBetween(tmpckr1.Time,tmpckr2.Time))+' '
+FloatToStr(MinuteSpan(tmpckr1.Time,tmpckr2.Time)));
Run Code Online (Sandbox Code Playgroud)
这是在一个TTimer. 输出如预期:
mmo1.Lines.Add(FormatDateTime('yyyy/mm/dd hh:nn:ss.zzz',tmpckr1.Time)+' '
+FormatDateTime('yyyy/mm/dd hh:nn:ss.zzz',tmpckr2.Time)+' '
+IntToStr(MinutesBetween(tmpckr1.Time,tmpckr2.Time))+' '
+FloatToStr(MinuteSpan(tmpckr1.Time,tmpckr2.Time)));
Run Code Online (Sandbox Code Playgroud)
我将单击tmpckr1,然后在底部打勾。请注意,我当时没有更改任何内容,这就是结果。
2023/09/18 20:46:29.571 2023/09/18 20:46:29.571 0 0
Run Code Online (Sandbox Code Playgroud)
我重复一遍,这次是tmpckr2:
1899/12/30 20:46:29.571 2023/09/18 20:46:29.571 65069280 65069280
Run Code Online (Sandbox Code Playgroud)
有没有办法防止这种情况发生,或者我必须使用EncodeDate()、 、做一些魔法EncodeTime(),ReplaceDate()以便s的值ReplaceTime()真正匹配,还是我让事情变得过于复杂?TTimeTTimePicker
如果我只是处理TTime,为什么日期是一个因素?TTimePicker为什么一旦有活动,日期就会改变 …
tdatetime ×11
delphi ×10
c++ ×2
delphi-2010 ×2
time ×2
date ×1
datetime ×1
dbexpress ×1
reflection ×1
tvalue ×1
validation ×1
vcl ×1