截取字符串的问题 本帖最后由 kayoo 于 2012-05-19 21:53:02 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 var ST : TSystemTime; n : integer;begin Windows.GetLocalTime(ST); n := ST.wYear * 10000 + ST.wMonth * 100 + ST.wDay;end; var Y , M , D : WORD; n : integer;begin DecodeDate(StrToDateTimeDef(Edit1.Text , 0) , Y , M , D); n := Y * 10000 + M * 100 + D;end; var d:integer;d:=StrToInt(FormatDateTime('yyyymmdd',Date)); //Date就是系统当前日期 vartemp:string;begintemp:=copy(edit1.text,1,4)+copy(edit1.text,6,7)+copy(edit1.text,9,10);end;temp里就只有年月日没-号了. Edit1.text里的字符串是2012-05-19//截取并合并字符串//引用单元StrUtils//安扭BUTTON1中的代码如下:var EEdit1:string; //原edit1.text内的字符串 dsEdit:string;//合并字符串begin //Edit1.text:='2012-05-19'; EEdit1:=trim(edit1.text); //年 月 日 dsEdit:=LeftStr(EEdit1,4)+Copy(EEdit1,6,2) +RightStr(EEdit1,2); showmessage('日期转换2012-05-19为:'+dsEdit);end; IntToStr(ReplaceStr(Edit1.text, '-', '')) 不好意思,写错了,应该是StrToInt(ReplaceStr(Trim(Edit1.Text), '-', '')) strtoint(stringreplace(edit1.text, '-', '', [rfreplaceall]))把-替换成空白再转成整数 tmpstr:=StringReplace('2012-12-04','-','',[rfReplaceAll]);//tmpstr='20121204' 3楼是正解,格式可以自己控制d:=StrToInt(FormatDateTime('yyyy-mm-dd',Date)); uses ...,sysutils;...var s: string;begin s := stringReplace(Edit1.text,'-','',[rfReplaceAll]); result := StrToInt(s);end; 楼主 其实这个问题 楼上大多数的解法都是正确的 关于日期问题 并不在于 是否是本机的 或 服务器的时间 而关键在于一下几点:1:日期是浮点数,整数部分表示的是从起始日期距离当前的日期的天数,小数部分是time/24。所以,当你使用浮点数值在不同系统之间传递时间的时候,需要知道不同系统之间日期的起始值是多少,例如,delphi中日期起始值0表示的是1899年12月30日 00:00,而SQL Server Oracle中的起始日期0是1900年1月1日 00:00.所以你需要查阅相关手册。注意,在delphi中,你如果通过midas与数据库传递日期,Midas会自动补差。2:方便起见,你可以使用字符串在不同系统间传递日期,但是你在传递日期字符串时,需要明确日期格式,最好不要期望使用默认格式做转换。因为,系统的默认格式是可选的,如果是Windows系统,就在控制面板-区域 中设置,如果被人设置为特殊格式,就会引起你的程序异常,即便是通用格式,也有可能会由于UK与US的日期格式差异,造成潜在错误。所以,如果你传入的是日期字符串,期望转成整型,我建议按照如下的写法var FFMT: TFormatSettings;begin with FFMT do begin ShortDateFormat:= 'yyyy-MM-dd'; DateSeparator:= '-'; end; Edit2.Text:= FormatDateTime('yyyyMMdd', StrToDate(Edit1.Text, FFMT));end;当然,如果你可以确保你的输入日期可以一定是yyyy-MM-dd 那也不需要写的很麻烦,就使用楼上的字符串替换的方法即可。 我之所以选择他为最佳,是因为完整且简洁,至少加了uses,功能也符合我的要求抱歉 VCL框架评价向来是很高的,但今天我搞个小玩意儿却有了点想法,但愿是我不对 sql语句问题 急:(百分请教)如何连接另一网段中的sql server2000服务器? 使用Table插入数据时的问题(在线等待) 菜单快捷键问题 如何申请MSN? 怎么实现让回车隔10秒自动按下一次 如何在两台机子之间进行文件传输。 关于线程的问题,高手快帮我.谢谢 请教:NMSMTP1.Connect 问题。 谁有带文件比较功能的ultraedit? Edit怎么添加提示输入的文字和图片?
var
ST : TSystemTime;
n : integer;
begin
Windows.GetLocalTime(ST);
n := ST.wYear * 10000 + ST.wMonth * 100 + ST.wDay;
end;
var
Y , M , D : WORD;
n : integer;
begin
DecodeDate(StrToDateTimeDef(Edit1.Text , 0) , Y , M , D);
n := Y * 10000 + M * 100 + D;
end;
temp:string;begin
temp:=copy(edit1.text,1,4)+copy(edit1.text,6,7)+copy(edit1.text,9,10);
end;
temp里就只有年月日没-号了.
//截取并合并字符串
//引用单元StrUtils
//安扭BUTTON1中的代码如下:
var
EEdit1:string; //原edit1.text内的字符串
dsEdit:string;//合并字符串
begin
//Edit1.text:='2012-05-19';
EEdit1:=trim(edit1.text);
//年 月 日
dsEdit:=LeftStr(EEdit1,4)+Copy(EEdit1,6,2) +RightStr(EEdit1,2);
showmessage('日期转换2012-05-19为:'+dsEdit);
end;
//tmpstr='20121204'
d:=StrToInt(FormatDateTime('yyyy-mm-dd',Date));
...,sysutils;
...
var
s: string;
begin
s := stringReplace(Edit1.text,'-','',[rfReplaceAll]);
result := StrToInt(s);
end;
1:日期是浮点数,整数部分表示的是从起始日期距离当前的日期的天数,小数部分是time/24。所以,当你使用浮点数值在不同系统之间传递时间的时候,需要知道不同系统之间日期的起始值是多少,例如,delphi中日期起始值0表示的是1899年12月30日 00:00,而SQL Server Oracle中的起始日期0是1900年1月1日 00:00.所以你需要查阅相关手册。注意,在delphi中,你如果通过midas与数据库传递日期,Midas会自动补差。
2:方便起见,你可以使用字符串在不同系统间传递日期,但是你在传递日期字符串时,需要明确日期格式,最好不要期望使用默认格式做转换。因为,系统的默认格式是可选的,如果是Windows系统,就在控制面板-区域 中设置,如果被人设置为特殊格式,就会引起你的程序异常,即便是通用格式,也有可能会由于UK与US的日期格式差异,造成潜在错误。所以,如果你传入的是日期字符串,期望转成整型,我建议按照如下的写法
var
FFMT: TFormatSettings;
begin
with FFMT do
begin
ShortDateFormat:= 'yyyy-MM-dd';
DateSeparator:= '-';
end;
Edit2.Text:= FormatDateTime('yyyyMMdd', StrToDate(Edit1.Text, FFMT));
end;当然,如果你可以确保你的输入日期可以一定是yyyy-MM-dd 那也不需要写的很麻烦,就使用楼上的字符串替换的方法即可。