哈哈,没想到我最近写的几个破过程还很有用:
//将以Separate区分的字符串转化为日期变量
function MyStrtoDate(Str: String;Separate:Char): TDate;
Var
DStr0,DStr1,DStr:String;
Mon,Dat,Yea,md_Tem:Word;
begin DStr:=Str;
Dstr0:='';
Try
Try
While(DStr0='')And(Dstr<>'') Do
Begin
SubfromStr(DStr,Separate,DStr0,DStr1);
DStr:=DStr1;
End;
If DStr0<>'' Then
Mon:=StrtoInt(DStr0);
Dstr0:='';
While(DStr0='')And(Dstr<>'') Do
Begin
SubfromStr(DStr,Separate,DStr0,DStr1);
DStr:=DStr1;
End;
If DStr0<>'' Then
Dat:=StrtoInt(DStr0);
Dstr0:='';
While(DStr0='')And(Dstr<>'') Do
Begin
SubfromStr(DStr,Separate,DStr0,DStr1);
DStr:=DStr1;
End;
If DStr0<>'' Then
Begin
Yea:=StrtoInt(DStr0);
If Yea<100 Then
Begin
If Yea>50 then
Yea:=1900+Yea
Else
Yea:=2000+Yea;
End;
End;
If Mon>12 Then
If Dat<12 Then
Begin
MD_Tem:=Mon;
Mon:=Dat;
Dat:=MD_Tem;
End;
Except
DecodeDate(Date,Yea,Mon,Dat);
// MessageDlg('日期转换错误,将用当前日期替换',mtError,[mbOK],0);
End;
Finally
result:=EncodeDate(Yea,Mon,Dat);
// Showmessage(DateToStr(Result));
End;
end;其中SubfromStr子过程如下;
Procedure SubfromStr(Const Str_T:String;Delimiter:Char;Var Str0,Str1:String);
Var
Str:String;
Str_Pos1,Str_Pos2:Integer;
Str_Start,Str_num,Str_pos:Integer;
begin
str:=trim(Str_t);
Str_pos:=Pos(Delimiter,Str); if(Str_Pos=0)then
begin
Str0:=Str;
Str1:='';
end
Else
begin
Str_Start:=1;
Str_Num:=Str_Pos-1;
Str0:=copy(str,Str_Start,Str_Num);
Str_Start:=Str_Num+2;
Str1:=Copy(Str,Str_Start,length(Str));
end;
end;
//将以Separate区分的字符串转化为日期变量
function MyStrtoDate(Str: String;Separate:Char): TDate;
Var
DStr0,DStr1,DStr:String;
Mon,Dat,Yea,md_Tem:Word;
begin DStr:=Str;
Dstr0:='';
Try
Try
While(DStr0='')And(Dstr<>'') Do
Begin
SubfromStr(DStr,Separate,DStr0,DStr1);
DStr:=DStr1;
End;
If DStr0<>'' Then
Mon:=StrtoInt(DStr0);
Dstr0:='';
While(DStr0='')And(Dstr<>'') Do
Begin
SubfromStr(DStr,Separate,DStr0,DStr1);
DStr:=DStr1;
End;
If DStr0<>'' Then
Dat:=StrtoInt(DStr0);
Dstr0:='';
While(DStr0='')And(Dstr<>'') Do
Begin
SubfromStr(DStr,Separate,DStr0,DStr1);
DStr:=DStr1;
End;
If DStr0<>'' Then
Begin
Yea:=StrtoInt(DStr0);
If Yea<100 Then
Begin
If Yea>50 then
Yea:=1900+Yea
Else
Yea:=2000+Yea;
End;
End;
If Mon>12 Then
If Dat<12 Then
Begin
MD_Tem:=Mon;
Mon:=Dat;
Dat:=MD_Tem;
End;
Except
DecodeDate(Date,Yea,Mon,Dat);
// MessageDlg('日期转换错误,将用当前日期替换',mtError,[mbOK],0);
End;
Finally
result:=EncodeDate(Yea,Mon,Dat);
// Showmessage(DateToStr(Result));
End;
end;其中SubfromStr子过程如下;
Procedure SubfromStr(Const Str_T:String;Delimiter:Char;Var Str0,Str1:String);
Var
Str:String;
Str_Pos1,Str_Pos2:Integer;
Str_Start,Str_num,Str_pos:Integer;
begin
str:=trim(Str_t);
Str_pos:=Pos(Delimiter,Str); if(Str_Pos=0)then
begin
Str0:=Str;
Str1:='';
end
Else
begin
Str_Start:=1;
Str_Num:=Str_Pos-1;
Str0:=copy(str,Str_Start,Str_Num);
Str_Start:=Str_Num+2;
Str1:=Copy(Str,Str_Start,length(Str));
end;
end;
解决方案 »
- 还是界面问题,VS.net中属性设置的表格用什么做比较好
- 如何定義浮點型數字?
- delphi7 THTTPRIO 组件在windows2003上使用调用webservice报内存错误的问题
- 能否将字符串(文本)动态转化为一个控件的事件?急!
- 在线等待--50分 [动态生成20个按钮,程序运行时,我想当用户按了其中一个按钮就弹出对话框。]
- 谁能提供DBGridxxs控件
- 请问如何取出QRDBText中显示的值
- delphi如何接收VC写的DLL里的形参的值?
- 在delphi编程时使用query控件的时候,怎样处理query结果?
- 谁告诉我著名的ex-ex站点的url?
- 新手在mdi多文档程序设计中,文件保存遇到的问题!请高手指点!!!
- 如何暂停窗口的刷新?特别是菜单和工具条(包括OLE控件激活时融入的菜单和工具条)
程序的结果是完全有效的。
FormatDateTime并不能转换这种字符串形式的时间,所以你首先必须将其按一个字符串读入,然后,按我的程序进行转换,没有任何问题。
s:='1970/1/1/0:00';
DateSeparator := '/';
ShortDateFormat := 'yyyy/m/d/';//1970/1/1/0:00
StrtoDate(Copy(S,1,8));
s:='1970/1/1/0:00';
DateSeparator := '/';
ShortDateFormat := 'yyyy/m/d/';//1970/1/1/0:00
StrtoDate(Copy(S,1,8));”
哈哈,我知道我的程序原来为什么不行的原因了:
我的源代码是 s:='1970/1/1/0:00';
DateSeparator := '/';
StrtoDate(Copy(S,1,8));丢了中间的一行。
谢谢 9527(?????)