我想格式化FUNCTION DATE-TIME。我拥有的是
MOVE FUNCTION CURRENT-DATE TO WS-CURRENT-DATE-DATA
DISPLAY WS-CURRENT-DATE-DATA
我尝试使用填充物
01 WS-CURRENT-DATE-DATA.
05 WS-CURRENT-DATE.
10 WS-CURRENT-YEAR PIC 9(04).
10 FILLER PIC X(01) VALUE "-".
10 WS-CURRENT-MONTH PIC 9(02).
10 WS-CURRENT-DAY PIC 9(02).
05 WS-CURRENT-TIME.
10 WS-CURRENT-HOURS PIC 9(02).
10 WS-CURRENT-MINUTE PIC 9(02).
10 WS-CURRENT-SECOND PIC 9(02).
10 WS-CURRENT-MILLISECONDS PIC 9(02).
我得到的结果是后面的连字符,如
2017122818242863-
但我想要的可能是这个
2017-12-28-18:24:28:63
请帮助。提前致谢
答案 0 :(得分:2)
您之后看到此连字符的原因是因为这是实际数据定义FUNCTION CURRENT-DATE
所期望的:
05 WS-CURRENT-DATE-TIME.
10 WS-CURRENT-DATE.
15 WS-CURRENT-YEAR PIC 9(4).
15 WS-CURRENT-MONTH PIC 9(2).
15 WS-CURRENT-DAY PIC 9(2).
10 WS-CURRENT-TIME.
15 WS-CURRENT-HOUR PIC 9(2).
15 WS-CURRENT-MIN PIC 9(2).
15 WS-CURRENT-SEC PIC 9(2).
15 WS-CURRENT-MS PIC 9(2).
10 WS-DIFF-GMT PIC S9(4).
你会注意到格林威治标准时差的末尾有一个额外的字段。此外,您不能只是在定义中添加填充符,并希望该函数知道如何处理它。基本上正在发生的事情是你输入的连字符(在图片子句中)被从函数传递的数据覆盖,你需要的是工作存储器中的2个位置。一个用于保存函数的返回值,另一个用于保存格式化的值,如下所示:
01 WS-TEMP-DT.
05 WS-TEMP-DATE-TIME.
10 WS-TEMP-DATE.
15 WS-TEMP-YEAR PIC 9(4).
15 WS-TEMP-MONTH PIC 9(2).
15 WS-TEMP-DAY PIC 9(2).
10 WS-TEMP-TIME.
15 WS-TEMP-HOUR PIC 9(2).
15 WS-TEMP-MIN PIC 9(2).
15 WS-TEMP-SEC PIC 9(2).
15 WS-TEMP-MS PIC 9(2).
10 WS-DIFF-GMT PIC S9(4).
01 WS-FORMATTED-DT.
05 WS-FORMATTED-DATE-TIME.
15 WS-FORMATTED-YEAR PIC 9(4).
15 FILLER PIC X VALUE '-'.
15 WS-FORMATTED-MONTH PIC 9(2).
15 FILLER PIC X VALUE '-'.
15 WS-FORMATTED-DAY PIC 9(2).
15 FILLER PIC X VALUE '-'.
15 WS-FORMATTED-HOUR PIC 9(2).
15 FILLER PIC X VALUE ':'.
15 WS-FORMATTED-MIN PIC 9(2).
15 FILLER PIC X VALUE ':'.
15 WS-FORMATTED-SEC PIC 9(2).
15 FILLER PIC X VALUE ':'.
15 WS-FORMATTED-MS PIC 9(2).
MOVE FUNCTION CURRENT-DATE TO WS-TEMP-DATE-TIME
MOVE WS-TEMP-YEAR TO WS-FORMATTED-YEAR
MOVE WS-TEMP-MONTH TO WS-FORMATTED-MONTH
MOVE WS-TEMP-DAY TO WS-FORMATTED-DAY
MOVE WS-TEMP-HOUR TO WS-FORMATTED-HOUR
MOVE WS-TEMP-MIN TO WS-FORMATTED-MIN
MOVE WS-TEMP-SEC TO WS-FORMATTED-SEC
MOVE WS-TEMP-MS TO WS-FORMATTED-MS
DISPLAY WS-FORMATTED-DATE-TIME
答案 1 :(得分:1)
您需要在WS-CURRENT-DATE-DATA下定义子字段以分解yy,mm,dd,hh,mn,ss,ms,然后将它们分别移动到WS-CURRENT-DATE和WS-下的字段中当前正确地让你的' - '和':'字符显示出来。
答案 2 :(得分:1)
正如Joe已经说过的 - 如果你将某些内容移动到一个组项目中,你可以在没有转换的情况下获取数据,所以要么移动子字段,要么(如果你的编译器支持它) - 你错过了指定哪一个&# 39;已使用)使用FUNCTION FORMATTED-DATETIME
。
答案 3 :(得分:1)
CURRENT-DATE是一个21个字符的字段,包含与GMT相关的日期,时间和偏移量。后面的连字符"连字符实际上是GMT偏移的第一个位置。
UNSTRING语句可用于移动CURRENT-DATE的各个部分。
UNSTRING FUNCTION CURRENT-DATE
INTO WS-CURRENT-YEAR WS-CURRENT-MONTH WS-CURRENT-DAY
WS-CURRENT-HOURS WS-CURRENT-MINUTE
WS-CURRENT-SECOND WS-CURRENT-MILLISECONDS
END-UNSTRING
DISPLAY WS-CURRENT-DATE-DATA
答案 4 :(得分:0)
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DATETIME PIC X(21).
01 WS-FORMATTED-DT.
05 WS-FORMATTED-DTE-TME.
15 WS-FORMATTED-YEAR PIC 9(4).
15 FILLER PIC X VALUE '-'.
15 WS-FORMATTED-MONTH PIC 9(2).
15 FILLER PIC X VALUE '-'.
15 WS-FORMATTED-DY PIC 9(2).
15 FILLER PIC X VALUE '-'.
15 WS-FORMATTED-HOUR PIC 9(2).
15 FILLER PIC X VALUE ':'.
15 WS-FORMATTED-MINS PIC 9(2).
15 FILLER PIC X VALUE ':'.
15 WS-FORMATTED-SEC PIC 9(2).
15 FILLER PIC X VALUE ':'.
15 WS-FORMATTED-MS PIC 9(2).
PROCEDURE DIVISION.
MOVE FUNCTION CURRENT-DATE TO WS-DATETIME.
MOVE WS-DATETIME(1:4) TO WS-FORMATTED-YEAR.
MOVE WS-DATETIME(5:2) TO WS-FORMATTED-MONTH.
MOVE WS-DATETIME(7:2) TO WS-FORMATTED-DY.
MOVE WS-DATETIME(9:2) TO WS-FORMATTED-HOUR.
MOVE WS-DATETIME(11:2) TO WS-FORMATTED-MINS.
MOVE WS-DATETIME(13:2) TO WS-FORMATTED-SEC.
MOVE WS-DATETIME(15:2) TO WS-FORMATTED-MS.
DISPLAY WS-DATETIME.
DISPLAY WS-FORMATTED-DT.
STOP RUN.
结果:
2018011005202041+0000
2018-01-10-05:20:20:41