发现一个Delphi的Bug

trainbox 2003-11-19 09:12:54
var
v: Variant;
d: TDateTime;
begin
//无问题
d:=strtodatetime('2001/12/31 02:53:39');
v:=d;
DBEdit1.Field.Value:=v; (uuu)

//有问题
d:=strtodatetime('0001/12/31 02:53:39');
v:=d;
DBEdit1.Field.Value:=v; (xxx)

end;

DBEdit1是一个DateTime类型的字段,语句XXX异常
...全文
24 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
trainbox 2003-11-21
  • 打赏
  • 举报
回复
楼上的还没有看清楚问题根源所在
dy_paradise 2003-11-21
  • 打赏
  • 举报
回复
最小值为1900年,当然会错喽
trainbox 2003-11-21
  • 打赏
  • 举报
回复
up
liyangyao970 2003-11-20
  • 打赏
  • 举报
回复
up
trainbox 2003-11-20
  • 打赏
  • 举报
回复
这个确实是Delphi的bug,是Variant值赋值给一个日期字段是的bug
4043335 2003-11-20
  • 打赏
  • 举报
回复
动不动就说delphi有bug
唉!!!!!!!!!!!!!!1
trainbox 2003-11-20
  • 打赏
  • 举报
回复
//这一句没有错,我机器时间格式就是yyyy/mm/dd hh:nn:ss
d:=strtodatetime('0001/12/31 02:53:39');
//d是TDateTime型,实际就是Double型,赋值给V(Variant)
v:=d;
//再把v赋值给DBEdit1.Field.Value,弹出错误Invalid Field Value of 'Hiredate'
DBEdit1.Field.Value:=v;

//下面这样做是没问题的
DBEdit1.Field.AsDateTime:=v; //不是DBEdit1.Field.Value

trainbox 2003-11-20
  • 打赏
  • 举报
回复
//这一句没有错,我机器时间格式就是yyyy/mm/dd hh:nn:ss
d:=strtodatetime('0001/12/31 02:53:39');
//d是TDateTime型,实际就是Double型,赋值给V(Variant类型)
v:=d;
//再把v赋值给DBEdit1.Field.Value,弹出错误Invalid Field Value of 'Hiredate'
DBEdit1.Field.Value:=v;
Zhangfeiyang 2003-11-20
  • 打赏
  • 举报
回复
中国的日期格式:0001-12-31 02:53:39
西方日期格式:12/31/0001 02:53:39
请看一下Delphi帮助吧
pwzhu666 2003-11-20
  • 打赏
  • 举报
回复
上面的各位说的都有些道理的,楼主不妨看看啊
zblaoshu1979 2003-11-20
  • 打赏
  • 举报
回复
'0001/12/31 02:53:39' 根本就不是一个正确的时间格式
trainbox 2003-11-20
  • 打赏
  • 举报
回复
抛出的异常是“Invalid Field Value of 'Hiredate'”
aiirii 2003-11-19
  • 打赏
  • 举报
回复
>>DBEdit1是一个DateTime类型的字段,语句XXX异常
給出語句异常提示!!這樣比較好解決點!
trainbox 2003-11-19
  • 打赏
  • 举报
回复
ding
trainbox 2003-11-19
  • 打赏
  • 举报
回复
d:=strtodatetime('0001/12/31 02:53:39');
DBEdit1.Field.AsDateTime:=d;
或者

d:=strtodatetime('0001/12/31 02:53:39');
v:=d;
DBEdit1.Field.AsDateTime:=v; //不是DBEdit1.Field.Value
这样做是没问题的

其实这应该是Variant类型转换的Bug

日期1899年12月31日是0,以前的就是负数,delphi还是支持公元一年的
snowmiao2002 2003-11-19
  • 打赏
  • 举报
回复
'0001/12/31 02:53:39' 是一个不正确的时间
myling 2003-11-19
  • 打赏
  • 举报
回复
好像日期的最小值时1900年吧?你搞个公元1年,难怪delphi会和你恼:)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧