得到4位表示 年份 的新方法?

发表于:2007-05-26来源:作者:点击数: 标签:
400系統中,有下列三個系統參數值跟年月日,時分秒的表示相關,尤其是年份,跟其他系統中的表示方法不一樣, [quote:906307d3bf] QDATE*DATTIMSystemdate QDATFMT*EDTDateformat QCENTURY*DATTIMCentury [/quote:906307d3bf] 其中, QDATE表示系統時間12/03/

400系統中,有下列三個系統參數值跟年月日,時分秒的表示相關,尤其是年份,跟其他系統中的表示方法不一樣,

[quote:906307d3bf]
QDATE          *DATTIM  System date
QDATFMT      *EDT     Date format
QCENTURY    *DATTIM  Century 
[/quote:906307d3bf]

其中,
QDATE表示系統時間 12/03/04   DD/MM/YY (或其他形式,都是六位)
QDATFMT 表示格式 DMY (MDY,YMD等等) 
QCENTURY  表示世紀碼,ibm這樣規定

[quote:906307d3bf]0=1928 - 1999
1=2000 - 2053[/quote:906307d3bf]
我也不清楚2053年後怎麼辦?

可是在我們實際應用中,大步份使用的是4位的年份表示方法,TVSYSVAL 指令僅可傳回 2 位數的年(如 97,98),用System API  QWCCVTDT可以緩解這個問題,如下:

[code:1:906307d3bf]PGM
DCL   &TODAY  *DEC  (8 0) /* TODAYS-DATE */    
DCL   &TODAYA *CHAR   (8) /* TODAYS-DATE */    
DCL   &TIME   *DEC  (6 0) /* CURRENT-TIME */   
DCL   &TIMEA  *CHAR   (6) /* CURRENT-TIME */   
DCL   &NEWDTE17 *CHAR  (17) /* STRING CONATAINING DATE &TIME */
                            /*傳回格式 YYYYMMDDHHMMSSXXX XXX MEANS MINISEC*/

CALL       PGM(QWCCVTDT) PARM('*CURRENT  ' ' ' +   
                              '*YYMD      ' &NEWDTE17 X'00000000')  

CHGVAR     VAR(&TODAY)  VALUE(%SST(&NEWDTE17 1 8))  /*數字年月日 YYYYMMDD */
CHGVAR     VAR(&TODAYA) VALUE(%SST(&NEWDTE17 1 8))  /*文字       YYYYMMDD */
CHGVAR     VAR(&TIME)   VALUE(%SST(&NEWDTE17 9 6))  /*數字時分秒 HHMMSS */
CHGVAR     VAR(&TIMEA)  VALUE(%SST(&NEWDTE17 9 6))  /*文字       HHMMSS */
SNDPGMMSG  MSG(&TODAYA *BCAT &TIMEA) MSGTYPE(*COMP)
ENDPFM[/code:1:906307d3bf]

 michael9406 回复于:2004-03-12 20:07:13
设为原创精华

 fzrxh 回复于:2004-03-13 16:29:48
用cvtdat会不会各更简单呢
CVTDAT     DATE(&DATE) TOVAR(&DATEX) FROMFMT(*JOB) +
             TOFMT(*YYMD) TOSEP(*NONE)   
在把 &DATEX(8位字符)给8位数字

 andrewleading_he 回复于:2004-03-15 08:59:13
[quote:4862ad6280="fzrxh"]用cvtdat会不会各更简单呢
CVTDAT     DATE(&DATE) TOVAR(&DATEX) FROMFMT(*JOB) +
             TOFMT(*YYMD) TOSEP(*NONE)   
在把 &DATEX(8位字符)给8位数字[/quote:4862ad6280]


感謝先,我再試一試!

原文转自:http://www.ltesting.net