回 帖 发 新 帖 刷新版面

主题:怎样设置汉字时钟

[em53]

回复列表 (共14个回复)

11 楼

在表单中添加两个控件 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 楼

凑个热闹。
上面回帖基本是把 时分秒 分割开来进行处理,其实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 楼

哇,Ilikefox老师,太厉害啦!!每一贴都这么精!值得学习!!

14 楼

强烈建议楼主把 12 楼的定为最佳答案。

我来回复

您尚未登录,请登录后再回复。点此登录或注册