主题:怎样设置汉字时钟
dipingxian
[专家分:0] 发布于 2009-07-31 12:07:00
[em53]
回复列表 (共14个回复)
11 楼
sywzs [专家分:5650] 发布于 2009-08-03 15:34:00
在表单中添加两个控件 Label1 和 Timer1,如果不要秒,把关于秒的部分去掉。
表单的 Load 事件中的代码
public cHZ
cHZ="零一二三四五六七八九"
表单的 Init 事件中的代码
this.timer1.Interval=1000
Timer1 的 Timer 事件中的代码
nHOUR = HOUR(DATETIME( ))
nMINUTE = MINUTE(DATETIME( ))
nSEC = SEC(DATETIME( ))
DO CASE && 时的处理
CASE nHOUR<10
cHOUR=SUBSTR(cHZ,nHOUR*2+1,2)
CASE INT(nHOUR/10)=1
cHOUR="十"+IIF(MOD(nHOUR,10)=0,"",SUBSTR(cHZ,MOD(nHOUR,10)*2+1,2))
CASE INT(nHOUR/10)>1
cHOUR=SUBSTR(cHZ,INT(nHOUR/10)*2+1,2)+"十"+IIF(MOD(nHOUR,10)=0,"",;
SUBSTR(cHZ,MOD(nHOUR,10)*2+1,2))
ENDCASE
DO CASE && 分的处理
CASE nMINUTE<10
cMINUTE=SUBSTR(cHZ,nMINUTE*2+1,2)
CASE INT(nMINUTE/10)=1
cMINUTE="十"+IIF(MOD(nMINUTE,10)=0,"",SUBSTR(cHZ,MOD(nMINUTE,10)*2+1,2))
CASE INT(nMINUTE/10)>1
cMINUTE=SUBSTR(cHZ,INT(nMINUTE/10)*2+1,2)+"十"+IIF(MOD(nMINUTE,10)=0,"",;
SUBSTR(cHZ,MOD(nMINUTE,10)*2+1,2))
ENDCASE
DO CASE && 秒的处理
CASE nSEC<10
cSEC=SUBSTR(cHZ,nSEC*2+1,2)
CASE INT(nSEC/10)=1
cSEC="十"+IIF(MOD(nSEC,10)=0,"",SUBSTR(cHZ,MOD(nSEC,10)*2+1,2))
CASE INT(nSEC/10)>1
cSEC=SUBSTR(cHZ,INT(nSEC/10)*2+1,2)+"十"+IIF(MOD(nSEC,10)=0,"",;
SUBSTR(cHZ,MOD(nSEC,10)*2+1,2))
ENDCASE
thisform.label1.Caption=cHOUR+"时"+cMINUTE+"分"+cSEC+"秒"
12 楼
Ilikefox [专家分:5770] 发布于 2009-08-04 08:28:00
凑个热闹。
上面回帖基本是把 时分秒 分割开来进行处理,其实Fox的字符处理函数还是很强大的。换个思路,整体考虑 时分秒,多用几个函数,就没有必要写那么多行代码。
cTime=TIME()
cTime=STRTRAN(STRTRAN(cTime,":","时",1,1),":","分")+"秒"
cTime=CHRTRANC(STRCONV(cTime,1),STRCONV("0123456789",1),"零一二三四五六七八九")
FOR nI=2 TO 10 STEP 4
cTime=STUFFC(cTime,nI,0,"十")
ENDFOR
cTime=STRTRAN(STRTRAN(STRTRAN(cTime,"零十",""),"十零","十"),"一十","十")
?cTime
举例说明思路,假设现在是8点16分20秒
第1句得到 08:16:20 (获取时间字符串)
第2句得到 08时16分20秒 (:号更换及追加“秒”字)
第3句得到 零八时一六分二零秒 (数码转汉字)
4-6循环得到 零十八时一十六分二十零秒 (不管372十1,中间加“十”)
第7句得到 八时十六分二十秒 (小小的调整)
13 楼
homayzh [专家分:7040] 发布于 2009-08-04 10:39:00
哇,Ilikefox老师,太厉害啦!!每一贴都这么精!值得学习!!
14 楼
homayzh [专家分:7040] 发布于 2009-08-04 19:06:00
强烈建议楼主把 12 楼的定为最佳答案。
我来回复