| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2401 人关注过本帖
标题:急,日期大写问题
只看楼主 加入收藏
ytwj
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2006-5-15
收藏
 问题点数:0 回复次数:10 
急,日期大写问题

如何把数字日期转换成大写日期。程序该怎么写?谢谢!

例如:
2006年06月23日转换成
贰零零陆年零陆月贰拾叁日

搜索更多相关主题的帖子: 数字 
2006-06-23 10:10
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
*FUNCTION CDTOCD
PARAMETERS cDate1
PRIVATE cString1,cString2,nMonth,nDay,I
cString1="0123456789"
cString2="零壹贰叁肆伍陆柒捌玖"
IF TYPE("cDate1")#CHR(67) OR SUBSTR(cDate1,5,2)#"年" OR SUBSTR(cDate1,9,2)#"月" OR SUBSTR(cDate1,13,2)#"日"
RETURN REPLICATE("*",14)
ENDIF
FOR I=1 TO 4
IF !SUBSTR(cDate1,I,1)$cString1
RETURN REPLICATE("*",14)
ENDIF
ENDFOR
FOR I=1 TO 2
IF !SUBSTR(cDate1,6+I,1)$cString1
RETURN REPLICATE("*",14)
ENDIF
IF !SUBSTR(cDate1,10+I,1)$cString1
RETURN REPLICATE("*",14)
ENDIF
ENDFOR
cDate2=""
FOR I=1 TO 4
cDate2=cDate2+SUBSTR(cString2,VAL(SUBSTR(cDate1,I,1))*2+1,2)
ENDFOR
cDate2=cDate2+"年"
nMonth=VAL(SUBSTR(cDate1,7,2))
DO CASE
CASE MOD(nMonth,10)=0
cDate2=cDate2+"拾月"
CASE nMonth<10
cDate2=cDate2+"零"+SUBSTR(cString2,nMonth*2+1,2)+"月"
OTHERWISE
cDate2=cDate2+"拾"+SUBSTR(cString2,nMonth*2-19,2)+"月"
ENDCASE
nDay=VAL(SUBSTR(cDate1,11,2))
DO CASE
CASE MOD(nDay,10)=0
cDate2=cDate2+SUBSTR(cString2,INT(nDay/10)*2+1,2)+"拾日"
CASE nDay<10
cDate2=cDate2+"零"+SUBSTR(cString2,MOD(nDay,10)*2+1,2)+"日"
CASE nDay<20
cDate2=cDate2+"拾"+SUBSTR(cString2,MOD(nDay,10)*2+1,2)+"日"
OTHERWISE
cDate2=cDate2+"贰拾"+SUBSTR(cString2,MOD(nDay,10)*2+1,2)+"日"
ENDCASE
RETURN cDate2

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-06-23 15:57
ytwj
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2006-5-15
收藏
得分:0 
谢谢。
但我运行?rqdx(2006)后出现**************14个星号。
在下不才,恳请大哥帮忙解决一下,那个程序是用在支票打印上的。
2006-06-24 07:41
hdzqs
Rank: 1
等 级:禁止访问
帖 子:218
专家分:0
注 册:2006-4-25
收藏
得分:0 
初阅了一下,程序中有审核日期的命令,要求有年月日,您上面的试运行日期没有月日,再试一试。

把您的需求变成我们的信息 让我们的信息成为您的财富
2006-06-24 13:14
ytwj
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2006-5-15
收藏
得分:0 
运行?rqdx(2006.06.24)和?rqdx(2006年06月24日)会出现函数名缺少。
运行?rqdx(20060624)依然出现14个星号。
2006-06-24 14:42
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
?rqdx("2006年06月24日")

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-06-25 09:08
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
程序修改了一下,可以处理更多的数据类型及更灵活的书写方式

*FUNCTION CDTOCD
***
*** 日期转换为大写的自定义函数 CDTOCD
***
*** 语法 CDTOCD(cDate1)
***
*** 输入参数cDate1
*** (1)字符型
*** 14个字符,格式是“YYYY年MM月DD日”
*** 10个字符,格式是“YYYY.MM.DD”
*** 8个字符,格式是“YYYYMMDD”
*** (2)日期型
*** 任何格式,只要是日期型就可以
*** (3)日期时间型
***
*** 输出结果
*** 字符型
***
*** 特别说明
*** 如果输入参数不是字符型,不是日期型,也不是日期时间型,则返回14个星号(*);
*** 如果输入参数是字符型,但没有按规定的格式输入,比如年份写在后面等,返回14个星(*)
***
*** 用法: ?CDTOCD("2006年06月25日") &&结果为“贰零零陆年零陆月贰拾伍日”
*** ?CDTOCD("2006.06.25")
*** ?CDTOCD("20060625)
*** ?CDTOCD(DATE()) &&显示系统日期的大写方式
*** ?CDTOCD(DATETIME())
*** ?CDTOCD(DTOC(DATE(),1))
***
PARAMETERS cDate1
PRIVATE cString1,cString2,nYear,nMonth,nDay,I
cString1="0123456789"
cString2="零壹贰叁肆伍陆柒捌玖"
* 确定参数的合法性。参数数据类型必须为C或D或T,否则返回14个星号
IF TYPE("cDate1")#CHR(67) AND TYPE("cDate1")#CHR(68) AND TYPE("cDate1")#CHR(84)
RETURN REPLICATE("*",14)
ENDIF
* 提取年、月、日信息
DO CASE
CASE TYPE("cDate1")=CHR(67) AND LEN(cDate1)=14 &&字符型,14个字符
nYear=VAL(SUBSTR(cDate1,1,4))
nMonth=VAL(SUBSTR(cDate1,7,2))
nDay=VAL(SUBSTR(cDate1,11,2))
CASE TYPE("cDate1")=CHR(67) AND LEN(cDate1)=10 &&字符型,10个字符
nYear=VAL(SUBSTR(cDate1,1,4))
nMonth=VAL(SUBSTR(cDate1,6,2))
nDay=VAL(SUBSTR(cDate1,9,2))
CASE TYPE("cDate1")=CHR(67) AND LEN(cDate1)=8 &&字符型,8个字符
nYear=VAL(SUBSTR(cDate1,1,4))
nMonth=VAL(SUBSTR(cDate1,5,2))
nDay=VAL(SUBSTR(cDate1,7,2))
CASE TYPE("cDate1")=CHR(68) OR TYPE("cDate1")=CHR(84) &&日期型或日期时间型
nYear=YEAR(cDate1)
nMonth=MONTH(cDate1)
nDay=DAY(cDate1)
OTHERWISE &&其他不合语法规则的数据
RETURN REPLICATE("*",14)
ENDCASE
*转换"年"
cDate2=""
FOR I=1 TO 4
cDate2=cDate2+SUBSTR(cString2,VAL(SUBSTR(PADL(nYear,4,"0"),I,1))*2+1,2)
ENDFOR
cDate2=cDate2+"年"
*转换"月"
DO CASE
CASE MOD(nMonth,10)=0
cDate2=cDate2+"拾月"
CASE nMonth<10
cDate2=cDate2+"零"+SUBSTR(cString2,nMonth*2+1,2)+"月"
OTHERWISE
cDate2=cDate2+"拾"+SUBSTR(cString2,nMonth*2-19,2)+"月"
ENDCASE
*转换"日"
DO CASE
CASE MOD(nDay,10)=0
cDate2=cDate2+SUBSTR(cString2,INT(nDay/10)*2+1,2)+"拾日"
CASE nDay<10
cDate2=cDate2+"零"+SUBSTR(cString2,MOD(nDay,10)*2+1,2)+"日"
CASE nDay<20
cDate2=cDate2+"拾"+SUBSTR(cString2,MOD(nDay,10)*2+1,2)+"日"
OTHERWISE
cDate2=cDate2+"贰拾"+SUBSTR(cString2,MOD(nDay,10)*2+1,2)+"日"
ENDCASE
RETURN cDate2

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-06-25 09:52
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
再次修改,可以处理数值型数据。
*FUNCTION CDTOCD
***
*** 日期转换为大写的自定义函数 CDTOCD
***
*** 语法 CDTOCD(cDate1)
***
*** 输入参数cDate1
*** (1)字符型
*** 14个字符,格式是“YYYY年MM月DD日”或者“YYYY..MM..DD..”(".."可以是任何无关字符)
*** 10个字符,格式是“YYYY.MM.DD”(.也可以是任何无关字符)
*** 8个字符,格式是“YYYYMMDD”
*** (2)日期型
*** 任何格式,只要是日期型就可以
*** (3)日期时间型
*** 日期时间型
*** (4)数值型
*** 格式"YYYYMMDD",8位整数
***
*** 输出结果
*** 字符型
***
*** 特别说明
*** 如果输入参数不是字符型,不是日期型,也不是日期时间型,也不是数值型,则返回14个星号(*);
***如果没有按规定的格式输入参数,则返回的结果可能不正确。
***
*** 用法: ?CDTOCD("2006年06月25日") &&结果为“贰零零陆年零陆月贰拾伍日”
*** ?CDTOCD("2006.06.25")
*** ?CDTOCD("20060625")
*** ?CDTOCD(DATE()) &&显示系统日期的大写方式
*** ?CDTOCD(DATETIME())
*** ?CDTOCD(DTOC(DATE(),1))
*** ?CDTOCD(20060625) &&显示“贰零零陆年零陆月贰拾伍日”
***
PARAMETERS cDate1
PRIVATE cString1,cString2,nYear,nMonth,nDay,I
cString1="0123456789"
cString2="零壹贰叁肆伍陆柒捌玖"
* 确定参数的合法性。参数数据类型必须为C或D或T或N,否则返回14个星号
IF TYPE("cDate1")#CHR(67) AND TYPE("cDate1")#CHR(68) AND TYPE("cDate1")#CHR(84) AND TYPE("cDate1")#CHR(78)
RETURN REPLICATE("*",14)
ENDIF
* 提取年、月、日信息
DO CASE
CASE TYPE("cDate1")=CHR(67) AND LEN(cDate1)=14 &&字符型,14个字符
nYear=VAL(SUBSTR(cDate1,1,4))
nMonth=VAL(SUBSTR(cDate1,7,2))
nDay=VAL(SUBSTR(cDate1,11,2))
CASE TYPE("cDate1")=CHR(67) AND LEN(cDate1)=10 &&字符型,10个字符
nYear=VAL(SUBSTR(cDate1,1,4))
nMonth=VAL(SUBSTR(cDate1,6,2))
nDay=VAL(SUBSTR(cDate1,9,2))
CASE TYPE("cDate1")=CHR(67) AND LEN(cDate1)=8 &&字符型,8个字符
nYear=VAL(SUBSTR(cDate1,1,4))
nMonth=VAL(SUBSTR(cDate1,5,2))
nDay=VAL(SUBSTR(cDate1,7,2))
CASE TYPE("cDate1")=CHR(68) OR TYPE("cDate1")=CHR(84) &&日期型或日期时间型
nYear=YEAR(cDate1)
nMonth=MONTH(cDate1)
nDay=DAY(cDate1)
CASE TYPE("cDate1")=CHR(78)
nYear=VAL(SUBSTR(PADL(cDate1,8,"0"),1,4))
nMonth=VAL(SUBSTR(PADL(cDate1,8,"0"),5,2))
nDay=VAL(SUBSTR(PADL(cDate1,8,"0"),7,2))
OTHERWISE &&其他不合语法规则的数据
RETURN REPLICATE("*",14)
ENDCASE
*转换"年"
cDate2=""
FOR I=1 TO 4
cDate2=cDate2+SUBSTR(cString2,VAL(SUBSTR(PADL(nYear,4,"0"),I,1))*2+1,2)
ENDFOR
cDate2=cDate2+"年"
*转换"月"
DO CASE
CASE MOD(nMonth,10)=0
cDate2=cDate2+"拾月"
CASE nMonth<10
cDate2=cDate2+"零"+SUBSTR(cString2,nMonth*2+1,2)+"月"
OTHERWISE
cDate2=cDate2+"拾"+SUBSTR(cString2,nMonth*2-19,2)+"月"
ENDCASE
*转换"日"
DO CASE
CASE MOD(nDay,10)=0
cDate2=cDate2+SUBSTR(cString2,INT(nDay/10)*2+1,2)+"拾日"
CASE nDay<10
cDate2=cDate2+"零"+SUBSTR(cString2,MOD(nDay,10)*2+1,2)+"日"
CASE nDay<20
cDate2=cDate2+"拾"+SUBSTR(cString2,MOD(nDay,10)*2+1,2)+"日"
OTHERWISE
cDate2=cDate2+"贰拾"+SUBSTR(cString2,MOD(nDay,10)*2+1,2)+"日"
ENDCASE
RETURN cDate2

[此贴子已经被作者于2006-6-26 9:43:32编辑过]


感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-06-25 10:03
ytwj
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2006-5-15
收藏
得分:0 
十分感谢!
2006-06-26 14:24
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
再次修改,能处理输入3个参数(分别表示年、月、日)的情况
*FUNCTION CDTOCD
***
*** 日期转换为大写的自定义函数 CDTOCD
***
*** 语法 CDTOCD(cDate1,nMonth,nDay)
***
*** 输入参数cDate1
*** (1)字符型,1个参数或多个参数,只有第1个参数有效
*** 14个字符,格式是“YYYY年MM月DD日”或者“YYYY..MM..DD..”(".."可以是任何无关字符)
*** 10个字符,格式是“YYYY.MM.DD”(.也可以是任何无关字符)
*** 8个字符,格式是“YYYYMMDD”
*** (2)日期型,1个参数或多个参数,只有第1个参数有效
*** 任何格式,只要是日期型就可以
*** (3)日期时间型,1个参数或多个参数,只有第1个参数有效
*** 日期时间型
*** (4)数值型,1个参数
*** 格式"YYYYMMDD",8位整数
*** (5)数值型,3个参数都是数值型
*** 格式CDTOCD(YYYY,MM,DD),3个整数
***
*** 输出结果
*** 字符型
***
*** 特别说明
*** 如果输入参数不是字符型,不是日期型,不是日期时间型,也不是数值型,则返回14个星号(*);
*** 如果输入参数是字符型,但没有按规定的格式输入,比如年份写在后面等,返回的结果可能不正确
***
*** 用法: ?CDTOCD("2006年06月25日") &&结果为“贰零零陆年零陆月贰拾伍日”
*** ?CDTOCD("2006.06.25")
*** ?CDTOCD("20060625")
*** ?CDTOCD(DATE()) &&显示系统日期的大写方式
*** ?CDTOCD(DATETIME())
*** ?CDTOCD(DTOC(DATE(),1))
*** ?CDTOCD(20060625) &&显示“贰零零陆年零陆月贰拾伍日”
*** ?CDTOCD(2006,6,25) &&显示“贰零零陆年零陆月贰拾伍日”
***
PARAMETERS cDate1,nMonth,nDay
PRIVATE cString1,cString2,nYear,nMonth,nDay,I,cDate1
cString1="0123456789"
cString2="零壹贰叁肆伍陆柒捌玖"
* 提取年、月、日信息
DO CASE
CASE TYPE("cDate1")=CHR(67) AND LEN(cDate1)=14 &&第1个参数是字符型C,14个字符
nYear=VAL(SUBSTR(cDate1,1,4))
nMonth=VAL(SUBSTR(cDate1,7,2))
nDay=VAL(SUBSTR(cDate1,11,2))
CASE TYPE("cDate1")=CHR(67) AND LEN(cDate1)=10 &&第1个参数是字符型C,10个字符
nYear=VAL(SUBSTR(cDate1,1,4))
nMonth=VAL(SUBSTR(cDate1,6,2))
nDay=VAL(SUBSTR(cDate1,9,2))
CASE TYPE("cDate1")=CHR(67) AND LEN(cDate1)=8 &&第1个参数是字符型C,8个字符
nYear=VAL(SUBSTR(cDate1,1,4))
nMonth=VAL(SUBSTR(cDate1,5,2))
nDay=VAL(SUBSTR(cDate1,7,2))
CASE TYPE("cDate1")=CHR(68) OR TYPE("cDate1")=CHR(84) &&第1个参数是日期型D或日期时间型T
nYear=YEAR(cDate1)
nMonth=MONTH(cDate1)
nDay=DAY(cDate1)
CASE TYPE("cDate1")=CHR(78) AND (TYPE("nMonth")#CHR(78) OR TYPE("nDay")#CHR(78)) &&第1个参数为数值型N,第2、第3个参数不完全是数值型
nYear=VAL(SUBSTR(PADL(cDate1,8,"0"),1,4))
nMonth=VAL(SUBSTR(PADL(cDate1,8,"0"),5,2))
nDay=VAL(SUBSTR(PADL(cDate1,8,"0"),7,2))
CASE TYPE("cDate1")=CHR(78) AND TYPE("nMonth")=CHR(78) AND TYPE("nDay")=CHR(78) &&3个参数都是数值型N,分别表示年、月、日
nYear=cDate1 &&提取年份信息
IF nYear<0 OR nYear>9999 &&年份为公元后纪年(不考虑公元前)
RETURN REPLICATE("*",14)
ENDIF
IF nMonth<1 OR nMonth>12 &&提取月份信息,月份范围为1-12
RETURN REPLICATE("*",14)
ENDIF
DO CASE &&提取日信息
CASE INLIST(nMonth,1,3,5,7,8,10,12) &&大月
IF nDay<1 OR nDay>31 &&大月的日范围为1-31
RETURN REPLICATE("*",14)
ENDIF
CASE INLIST(nMonth,4,6,9,11) &&小月
IF nDay<1 OR nDay>30 &&小月的日范围为1-30
RETURN REPLICATE("*",14)
ENDIF
CASE nMonth=2 AND (MOD(nYear,4)#0 OR MOD(nYear,4)=0 AND MOD(nYear,100)=0 AND MOD(nYear,400)#0) &&平年2月
IF nDay<1 OR nDay>28 &&平年的2月的日范围为1-28
RETURN REPLICATE("*",14)
ENDIF
CASE nMonth=2 AND (MOD(nYear,4)=0 AND MOD(nYear,100)#0 OR MOD(nYear,400)=0) &&闰年2月
IF nDay<1 OR nDay>29 &&闰年的2月的日范围1-29
RETURN REPLICATE("*",14)
ENDIF
ENDCASE
OTHERWISE &&其他不合语法规则的数据或无参数等所有情况
RETURN REPLICATE("*",14)
ENDCASE
*转换"年"
cDate2=""
FOR I=1 TO 4
cDate2=cDate2+SUBSTR(cString2,VAL(SUBSTR(PADL(nYear,4,"0"),I,1))*2+1,2)
ENDFOR
cDate2=cDate2+"年"
*转换"月"
DO CASE
CASE MOD(nMonth,10)=0
cDate2=cDate2+"拾月"
CASE nMonth<10
cDate2=cDate2+"零"+SUBSTR(cString2,nMonth*2+1,2)+"月"
OTHERWISE
cDate2=cDate2+"拾"+SUBSTR(cString2,nMonth*2-19,2)+"月"
ENDCASE
*转换"日"
DO CASE
CASE MOD(nDay,10)=0
cDate2=cDate2+SUBSTR(cString2,INT(nDay/10)*2+1,2)+"拾日"
CASE nDay<10
cDate2=cDate2+"零"+SUBSTR(cString2,MOD(nDay,10)*2+1,2)+"日"
CASE nDay<20
cDate2=cDate2+"拾"+SUBSTR(cString2,MOD(nDay,10)*2+1,2)+"日"
OTHERWISE
cDate2=cDate2+"贰拾"+SUBSTR(cString2,MOD(nDay,10)*2+1,2)+"日"
ENDCASE
RETURN cDate2

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-06-26 18:41
快速回复:急,日期大写问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029813 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved