2017-12-29 10 views
-2

FUNCTION DATE-TIMEをフォーマットします。どのような私が持っていることはCOBOLで日付時刻をフォーマットする

MOVE FUNCTION CURRENT-DATE TO WS-CURRENT-DATE-DATA 
DISPLAY WS-CURRENT-DATE-DATA 

であり、私は私が得ること

2017122818242863- 

などの後ろにハイフンで結果ですが、私がしたいことは、おそらくあるフィラー

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). 

を使用してみましたこの

2017-12-28-18:24:28:63 

Plsヘルプ。事前に感謝

+0

だからあなたは何を試してみました? - 現在の日付を設定して、現在の機能の日付と別の受信フィールドを受け取るようにしてください。 –

+0

@hiddenleaf 答えを確認してください、そして、stackoverflow.com/help/someone-answersを見てください。または投票+承諾(何があなたのために "働く"か)。 –

答えて

1

これは、実際のデータ定義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 
+0

WS-DIFF-GMT PIC S9(4)は、4つの位置フィールドを表します。 PIC + 9(4)はより良いでしょうが、 "符号"の位置は "0"を含むかもしれません。 –

1

WS-CURRENT-DATE-DATAの下にサブフィールドを定義して、yy、mm、dd、hh、mn、ss、msを分割し、それらを個別にWS-CURRENT- DATEとWS-CURRENT-TIMEを使用して ' - 'と ':'の文字が正しく表示されるようにします。

1

ジョーは既に言いました。グループ項目に何かを移動するとデータは変換されずに取得されるので、サブフィールドを移動するか(コンパイラがサポートしている場合は、使用)FUNCTION FORMATTED-DATETIMEを使用してください。

1

CURRENT-DATEは、GMTからの日付、時刻、およびオフセットを含む21文字のフィールドです。 「後ろのハイフン」は実際には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 
0

SaggingRufusの答えは有益でした。私は、Reference Modificationを使用して期待される出力を生成しようとしました。

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