关于日期显示问题,在线急等!
我用VF做一个报表 是可以打印出来的一个通知书 最后要有一个落款 时间.
可是系统能出来的日期是阿拉伯数字的时间 但我要的是二〇〇七年这种时间
请问各位大虾怎么处理
[解决办法]
&&试一试
set talk off
clear
x=date()
n_year=year(x)
n_month=month(x)
n_day=day(x)
&&年转换
cy_string= '零一二三四五六七八九 '
c_year= " "
for i=1 to 4
c_temp=substr(str(n_year,4),i,1)
n_temp=val(c_temp)+1
c_year=c_year+alltrim(substr(cy_string,((n_temp-1)*2+1),2))
endfor
&&月转换
lcYF=n_month
lcMonth= '一 二 三 四 五 六 七 八 九 十 十一十二 '
lcChmonth=alltrim(substr(lcMonth,((lcYF-1)*4+1),4))+ '月 '
&&日转换
cd_string= '一 二 三 四 五 六 七 八 九 十 '
cd_string=cd_string+ '十一 十二 十三 十四 十五 十六 十七 十八 十九 二十 '
cd_string=cd_string+ '二十一二十二二十三二十四二十五二十六二十七二十八二十九三十 三十一 '
c_day=alltrim(substr(cd_string,((n_day-1)*6+1),6))+ '日 '
c_date=c_year+ "年 "+lcChmonth+c_day
set date to ymd
set century on
? x, " ",c_date
[解决办法]
以下这个自定义过程可能更简化一些:
PARAMETERS vriqidx &&中文日期大写表示格式
IF EMPTY(vriqidx) &&如果是空的日期型(或日期时间型)则返回空值
riqidx= ' '
RETU riqidx
ENDIF
IF TYPE( 'vriqidx ')= 'D ' OR TYPE( 'vriqidx ')= 'T '
vn0=ALLTRIM(STR(YEAR(vriqidx)))
vn= ' '
FOR i=1 TO LEN(vn0) &&使用for语句使得即使输入“103.02.25”这样的日期也能转换!
vn=vn+IIF(SUBSTR(vn0,i,1)= '0 ', '○ ',;
SUBSTR( '一二三四五六七八九 ',VAL(SUBSTR(vn0,i,1))+VAL(SUBSTR(vn0,i,1))-1,2))
ENDFOR &&取得某年的大写
vy0=MONTH(vriqidx)
IF vy0> 10
vy=IIF(vy0=11, '十一 ', '十二 ')
ELSE
vy=SUBSTR( '一二三四五六七八九十 ',vy0+vy0-1,2)
ENDIF &&取得某月的大写
vr0=ALLTRIM(STR(DAY(vriqidx)))
IF VAL(vr0) <10
vr1=SUBSTR( '一二三四五六七八九 ',VAL(vr0)+VAL(vr0)-1,2)
vr2= ' '
ELSE
vr1=IIF(LEFT(vr0,1)= '1 ', '十 ',IIF(LEFT(vr0,1)= '2 ', '二十 ', '三十 ')) &&首位只能是1或2或3
vr2=IIF(RIGHT(vr0,1)= '0 ', ' ',;
SUBSTR( '一二三四五六七八九 ',VAL(RIGHT(vr0,1))+VAL(RIGHT(vr0,1))-1,2))
ENDIF
vr=vr1+vr2 &&取得某日大写
riqidx=vn+ '年 '+vy+ '月 '+vr+ '日 ' &&取得年月日大写
ELSE &&若非日期型,也非日期时间型,则返回空值
riqidx= ' '
ENDIF
RETU riqidx
用法示例:
?riqidx(date()) &&显示“二○○七年六月十六日”