日期转换问题(100分)

  • 主题发起人 houxiaolong
  • 开始时间
H

houxiaolong

Unregistered / Unconfirmed
GUEST, unregistred user!
程序中将EDIT中的DATETOSTR格式定为'YYYYMMDD',允许客户修改,
但按'YYYYMMDD'的格式用STRTODATE校验日期型参数,为何返回
"'yyyymmddd'is not a valid data"错误.我用
dataseparator:=chr(0)不行,修改shortdateformat也不行
能否日期转换不必有分割符,
请高手赐教!

程序如下:
procedure TInfoadd.FormShow(Sender: TObject)

begin
shortdateformat:='yyyymmdd'

edit40.text:=datetostr(date)


end

//校验
function TInfoadd.Errdatetime(myedit: Tedit ) : boolean

var
opendate1: tdatetime

begin
try
setlocaleinfo(LOCALE_USER_DEFAULT ,locale_sdate,pchar(''))

shortdateformat:='yyyymmdd'

opendate1:=strtodate(myedit.text);//报错
except
on e:Econverterror do
begin
showmessage(e.Message)

...
exit

end

end


end

 
为什么不用TIMEPICKER呢?
 
对呀,让用户直接选日期多好。点鼠标就行了。
 
用MaskEdit空间不就是了嘛, 定义以下mask为yyyy/mm/dd, 类型为日期,
/是不需要用户输入的, 这样和你要求的效果一样.
 
strtodata()函数中的str要用“-”分隔才能转换成Tdate
可以自己写一个过程转换
 
Edit40.Text := FormatDateTime('yyyymmdd', Date);
 
先谢谢各位的解释。各位富翁提到的替代方法我均想到了。
提这个问题的目的,只是不明白为什么不能没有分割符,
我试着读了STRTODAY()的原码,没读懂。请那位高人
能否解释一下原因,再次表示感谢,如果精辟可再加分数。
 
对,一定要分割符号否则991111是99-11-11呢还是9911-1-1呢
有个变量叫DateSeparator (char) 不能为空。
 
谢谢menmin的提醒是daytostr
 
查看一下MASKEDIT控件的EDITMAKE属性
 
?daytostr 我怎么没见过??
 
编写一个函数绕过去就行了
function changedatetostr(date:string):datetime;
var
date2:tdatetime:
begin
date2:=strtodate(copy(date,1,4)+‘-’+copy(date,5,6)+‘-’+copy(date,7,8));
result:=date2;
end;
仅供参考。提个思路而已。
 
接受答案了.
 
顶部