将日期转化为汉语的形式
【打印文章】
在DELPHI中没有直接将日期转化为汉语的形式,用起来很不方便,如:“2001年5月23日”在一些特殊场合需要转化为汉语,“二○○一年五月二十三日”
在这里有一个函数可以直接进行转化,在这里和大家共享,原代码如下:
procedure datechange(var Dyear, Dmonth,Dday:string;
const ADate:Tdatetime); //转化日期
function DCDate(ADate:TDateTime):TDDate;//将时间转化为汉字形式
function DCmonth(DMonth:string):string; //将月转化为汉字形式
function DCDay(DDay:string):string; //将日转化为汉字形式
function DCYear(Dyear:string):string; //将年转化为汉字形式
implementation
//以下是实现部分。
procedure datechange(var Dyear, Dmonth,Dday:string;
const ADate:Tdatetime);
begin
Dyear:=formatdatetime('yyyy',Adate);
Dmonth:=formatdatetime('mm',Adate);
Dday:=formatdatetime('dd',Adate);
end;
function TDWF.DCDate(ADate: TDateTime):TDDate;
var kk:TDdate;
sY,sM,sD:string;
begin
datechange(sy,sm,sd,Adate);
kk.year :=dcyear(sy);
kk.month :=DCmonth(sm);
kk.day:=DCday(sd);
result:=kk;
end;
function TDWF.DCDay(DDay: string): string;
const CDDay:array[1..31] of string=(
'一','二','三','四','五','六','七','八','九','十','十一',
'十二','十三','十四','十五','十六','十七','十八','十九',
'二十','二十一','二十二','二十三','二十四','二十五','二十六',
'二十七','二十八','二十九','三十','三十一'); //日期的汉语表示
var dd:integer;
begin
dd:=strtoint(DDay);
result:=cdday[dd];
end;
function TDWF.DCmonth(DMonth: string): string;
const CDmonth:array[1..12] of string=(
'一','二','三','四','五','六','七','八','九','十',
'十一','十二'); //月份的汉语表示
var dm:integer;
begin
dm:=strtoint(DMonth);
result:=cDmonth[dm];
end;
function TDWF.DCYear(Dyear: string): string;
const CDdigit:array[0..9] of string=(
'○','一','二','三','四','五','六','七','八','九'); //数字的汉字表示
var dh,dg,i:integer;
sg,ss,sb,sq:string;
Dtmp:string[4];
begin
dh:=length(Dyear);
sg:='';ss:='';sb:='';sq:='';
for i:=1 to dh do //i:=0 及 i:=dh+1 时,为开始标志为(#0);
begin
dtmp:=Dyear[i];
dg:=strtoint(dtmp);
case i of
1: sg:=cddigit[dg];
2: ss:=cddigit[dg];
3: sb:=cddigit[dg];
4: sq:=cddigit[dg];
end;
end;
result :=sg+ss+sb+sq;
end;
当然如果能将其嵌套在控件内的话将会更好,如果大家有更好的方法的别忘了通知我。
在这里有一个函数可以直接进行转化,在这里和大家共享,原代码如下:
procedure datechange(var Dyear, Dmonth,Dday:string;
const ADate:Tdatetime); //转化日期
function DCDate(ADate:TDateTime):TDDate;//将时间转化为汉字形式
function DCmonth(DMonth:string):string; //将月转化为汉字形式
function DCDay(DDay:string):string; //将日转化为汉字形式
function DCYear(Dyear:string):string; //将年转化为汉字形式
implementation
//以下是实现部分。
procedure datechange(var Dyear, Dmonth,Dday:string;
const ADate:Tdatetime);
begin
Dyear:=formatdatetime('yyyy',Adate);
Dmonth:=formatdatetime('mm',Adate);
Dday:=formatdatetime('dd',Adate);
end;
function TDWF.DCDate(ADate: TDateTime):TDDate;
var kk:TDdate;
sY,sM,sD:string;
begin
datechange(sy,sm,sd,Adate);
kk.year :=dcyear(sy);
kk.month :=DCmonth(sm);
kk.day:=DCday(sd);
result:=kk;
end;
function TDWF.DCDay(DDay: string): string;
const CDDay:array[1..31] of string=(
'一','二','三','四','五','六','七','八','九','十','十一',
'十二','十三','十四','十五','十六','十七','十八','十九',
'二十','二十一','二十二','二十三','二十四','二十五','二十六',
'二十七','二十八','二十九','三十','三十一'); //日期的汉语表示
var dd:integer;
begin
dd:=strtoint(DDay);
result:=cdday[dd];
end;
function TDWF.DCmonth(DMonth: string): string;
const CDmonth:array[1..12] of string=(
'一','二','三','四','五','六','七','八','九','十',
'十一','十二'); //月份的汉语表示
var dm:integer;
begin
dm:=strtoint(DMonth);
result:=cDmonth[dm];
end;
function TDWF.DCYear(Dyear: string): string;
const CDdigit:array[0..9] of string=(
'○','一','二','三','四','五','六','七','八','九'); //数字的汉字表示
var dh,dg,i:integer;
sg,ss,sb,sq:string;
Dtmp:string[4];
begin
dh:=length(Dyear);
sg:='';ss:='';sb:='';sq:='';
for i:=1 to dh do //i:=0 及 i:=dh+1 时,为开始标志为(#0);
begin
dtmp:=Dyear[i];
dg:=strtoint(dtmp);
case i of
1: sg:=cddigit[dg];
2: ss:=cddigit[dg];
3: sb:=cddigit[dg];
4: sq:=cddigit[dg];
end;
end;
result :=sg+ss+sb+sq;
end;
当然如果能将其嵌套在控件内的话将会更好,如果大家有更好的方法的别忘了通知我。
本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )
【编程爱好者论坛】