• 締切済み

[COBOL]日付比較

現在COBOLで以下のようなプログラムを作成しています。 受付日と今日の日付を比較して1ヶ月経過したデータと振り分ける。  1ヶ月経過したものは、削除分のデータとしてディスクに保存  1ヶ月経過していないものは、保存分のデータとしてディスクに保存 ただし、入力データは、受付日(6桁)に書かれているのは6桁(例:080524) 本日の日付は、システム時間で8桁(例:20080824) このままでは、桁数が違うので、比較することができないため、受付日を8桁にしたいと考えています。 つまり、「'20'+受付日」としたいのです。 この場合、どのようにすればよろしいのでしょうか? よろしくお願いします。

みんなの回答

  • LN-TF
  • ベストアンサー率53% (320/596)
回答No.2

ANo1と殆ど変わらないのですが・・・ 01 WK-DATE.    03 X8DATE   PIC  X(08).   03 X8DATE-R REDEFINES X8DATE.       05 YY20  PIC  X(02).      05 X6DATE        07 X6YY PIC  X(02).        07 X6MMDD PIC X(04). ・・・・・      IF X6YY > '60' MOVE '19' TO X6YY ELSE '20' TO X6YY ENDIF. 或いは。 01 WK-DATE.    03 X8DATE   PIC  9(08).   03 X8DATE-R REDEFINES X8DATE.       05 YY20  PIC  9(02).      05 X6DATE        07 X6YY PIC  9(02).        07 X6MMDD PIC 9(04). ・・・・・      IF X6YY > 60 MOVE 19 TO X6YY ELSE 20 TO X6YY ENDIF.  データが2000年以降と決まっているならば、 01 WK-DATE.    03 X8DATE   PIC  9(08).   03 X8DATE-R REDEFINES X8DATE.       05 YY20  PIC  9(02) VALUE 20.      05 X6DATER PIC 9(6) VALUE ZERO. ・・・・  MOVE 元の6桁日付 TO X6DATE. (比較はX8DATEとシステム日付の一カ月前と比較する) (WK-DATEを他用せないのならばこれだけで良い) 等など色々考えられます。  

lovelace
質問者

補足

LN-TFさん、回答ありがとうございます。 補足させていただきます。 ・判定するのは、年月のみ ・現在年月の1ヶ月前の年月を別のエリアで計算する ・受付年月は、   01 WORK-AREA.    05 WK-UKETUKEBI      10 WK-UKETUKE-YM PIC X(04).      10 FILLER PIC X(02).   01 DATE-AREA.    05 SISUTEMU-DATE.      10 SISUTEMU-NENGETU PIC X(06).      10 FILLER PIC X(02). です。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

COBOLといっても何COBOLなのかな? ずいぶん離れて久しいので間違ってたらすみません。 REDEFINESを利用して以下のように宣言。 01 X8DATE.    03 WK-PUNIPUNI   PIC  X(08). 01 X8DATE-R REDEFINES X8DATE.     03 YY20   PIC  X(02).    03 X6DATE   PIC  X(06). 【使い方】 初回のみYY20に '20'を放り込む。 以降、X6DATEに '080524'を放り込んでからX8DATEを参照すると '20080524'に見えます。

lovelace
質問者

補足

bin-chanさん、回答ありがとうございます。 使用しているのは、COBOLIIです。

関連するQ&A

  • [COBOL]日付比較 その2

    http://oshiete1.goo.ne.jp/qa4201503.htmlと同様の質問です。 受付日と今日の日付を比較して1ヶ月経過したデータと振り分ける。  1ヶ月経過したものは、削除分のデータとしてディスクに保存  1ヶ月経過していないものは、保存分のデータとしてディスクに保存 ただし、入力データは、受付日(6桁)に書かれているのは6桁(例:080524) 本日の日付は、システム時間で8桁(例:20080824) 入力データに記載されている受付日は2000年以降のものしかないため、受付日の先頭に20を追加します。 なお、判定日の1ヶ月前年月はサブモジュールで実装しています。 振り分けの条件では、年月のみで比較します。 (例)  受付日 080629   →200806 ('20')を追加  判定日 20080806  →200808   また、Copy句ファイル(BSCP10A)には、  10 'XXX-KEY-KOMOKU'   15 'XXX'-RIYOU-YMD PIC X(06).   15 'XXX'-RIYOU-ZIKOKU PIC X(06).   と定義されています。 以下のように実装してみました。(抜粋) WORKING-STORAGE SECTION. 01 DATA-IN. COPY BS10A SUPPRESS PREPLACING =='XXX'==BY==BS10A==. 01 DATA-OUT1. COPY BS10A SUPPRESS PREPLACING =='XXX'==BY==BS10A==. 01 DATA-OUT2. COPY BS10A SUPPRESS PREPLACING =='XXX'==BY==BS10A==. 01 WORK-AREA. //ここに受付日を8桁にする方法を記述? 05 WK-DATA-RIYOBI. PROCEDURE DIVISION. *--<主処理>-- MOVE BS10A-RIYOU-YMD TO WK-DATA-RIYOBI. //以下に振り分け条件記述 6桁にした受付日と判定日の1ヶ月前年月を比較 入力データの受付日に20を追加して6桁にする方法を教えてください。どうか皆様のお力を貸してください。 お願いします。

  • javaでの日付の大小比較について

    javaでの日付の大小比較について分からない事があります。 (1)例:2002/04/01と本日の日付(例:2002/06/03)の大小関係を調べるにはどうす ればよろしいのでしょうか? 何か分かる事がありましたら、ご教授お願い致します。

    • ベストアンサー
    • Java
  • Perlの日付の比較に関して

    現在perlを使ってCGIを作っているものです。 まだ、一ヶ月ちょっとの初心者と言うこともあり、 日付の操作の仕方で非常に苦労しています。 入力フォームには、リストボックスでそれぞれ、 ○○○○年 ○○月 ○○日 ○○時 ○○分があり、 フォームが表示されたときには、デフォルトで、本日の日付がセットされるようになっています。 送信ボタンを押す事で入力チェックがかかるのですが、 そのときに、上記の日付のリストボックスの値が、 本日よりも過去になっていたばあいは、エラーを返すと言う処理を作りたいのですが、どうしてもうまくいきません。 本日日付は、localtime関数で取れるのですが、 リストボックスにセットされている値を日付に変換する方法、 また、比較の仕方がさっぱりわかりません。 誰かわかる方がいましたら、ご教授ください。 具体的なソースも書いていただけると大変ありがたいです。 以上よろしくお願いします

    • ベストアンサー
    • Perl
  • 【Access2010】桁数バラバラの日付を統一

    添付画像のような日付データ(ピリオド区切り)があります。 データ(csvファイル)は原則毎日インポートしているので、日付の異なるデータが混在することはほとんどありませんが、まれに多忙・有休などで数日間インポートしなかった場合は混在してしまいます。 その場合は、csvファイルをコピーして桁数ごとにインポート→桁数ごとの更新クエリーを実行し数字8桁にする→更新クエリーで日付型にしています。  <例1:「***.*.*」の場合(日付更新用へ)>   桁数ごとの更新クエリー    → Left$([日付],4) & "0" & Mid$([日付],6,1) & "0" & Right([日付],1)  <例2:「***.**.**」の場合(日付更新用へ)>   桁数ごとの更新クエリー    → Left$([日付],4) & Mid$([日付],6,2) & Right([日付],2)  <共通>   日付型への更新クエリー    → Left$([日付更新用],4) & "/" & Mid$([日付更新用],5,2) & "/" & Right$([日付更新用],2) 実行すべき桁数ごとの更新クエリーを間違えるとインポート作業からやり直さなければならず、非常に面倒です。 桁数が違っても同じクエリーで数字8桁にする方法はありませんか?フィールド・クエリーの追加はいくらでも可能です。

  • 【エクセル】日付同士の比較について

    以下について質問があります。 【実現したいこと】 2つの日付(本日と予定日)を比較して、以下を実現したいと考えています。 (1)本日から予定日までの日数を表示させる。(例:A1セルに結果を表示させる。) (2)予定日が本日を過ぎてしまった場合にセルを赤色に塗りつぶすと同時に、「-何日」という形で予定日よりも何日遅れているかについて日数を表示させたい。 【試したこと】 (L4に本日の日付、R列に予定日が記入されています。) ■「予定日-本日」と「=DATEDIF($L$4,$R15,"D")」の2つの方法。 「予定日-本日」の場合、まだ予定日が記入されていないセルがあると、「-41125」の様に日付を数値化した結果が表示されてしまいます。 「=DATEDIF($L$4,$R15,"D")」の場合は、本日を過ぎた場合、「#NUM!」が表示されてしまいます。 ご教示いただけると大変助かります。 よろしくお願いいたします。

  • DB2のSQL(日付)について

    文字列で8桁の日付(例:20041208)を持っている項目の条件に本日日付以上という条件をつけたいのですが、 (例:where NEN >= 本日日付の文字列8桁 ) ※NEN:20041208 SQLでシステム日付を文字列8桁にする方法はありますか? ご教授お願いしますm(_ _)m

  • 日付型のデータに変換するには!?

    初めて、利用します!! テキストボックスに日付型のデータを入れたら、 指定した日付型のフォーマットに変換する関数を作ってます。 例えば、[20010101]と入力したら[2001/01/01]に変換! それで、入力桁数によって・・・年月日をそれぞれ算出しようとしてました。 例えば、2桁入力時は[1桁目]を「月」[2桁目]を「日」という具合に! そうしていくうち、5桁入力時に、年と月と日の判断をどうやったら良いのか わからなくなってしまいました。 今、考えられるケースとしては [YYYYM][YYMMD][YYMDD]なのですが 判断の方法を教えてください。_(_^_)_ ※Y:年 M:月 D:日

  • Accessを使って日付を比較したい

    MSofficeのAccessを使用して日付を比較したいのですが上手くいきません。 テーブル1のフィールドには実施日(日付型)、A期間開始日(日付型)、A期間終了日(日付型)があり データ1は2012/04/20、2012/04/15、2012/05/02 データ2は2012/04/25、2012/04/10、2012/04,23と格納されています。 この実施日がA期間に入るかどうかのチェックを行いたいのです。 クエリに入力した関数は IIf(CDate([テーブル1]![A期間開始日])<=CDate([テーブル1]![実施日])>=CDate([テーブル1]![A期間終了日]),"A期間","範囲外") と命令を書きました。 実行させるとデータ1、データ2とも期間外が返されました。 実際、返して欲しいデータはデータ1はA期間、データ2は期間外と表示したいのです。 環境はWindows XP profissional、アクセスは2002 SP3です。 よろしくお願いします。

  • エクセルVBA  「本日」の日付を検索したいのですが

    お世話になります。 シートを開いたときに、日付列を検索して本日と同じ日付(日付列に本日と同じ日付がなければ、前日や前々日など、近い日)の一番最初のセルをアクティブにしたいのです。 素人なのですが、教えていただけるでしょうか。 理由ですが、 エクセルで文書受付簿をつくり、利用しています。 受付簿であるシート名 台帳  で受付記録をしているのですが、 別シート  コピー用『前年度』データ   というものを作ってあります。 それは、前年度の受付内容をコピーしたものであり、必要なセルをダブルクリックするとシート  台帳  の最終行に貼り付けるようにVBAを組んでいます。 (毎年同じ件名の文書が来る場合は、ダブルクリックするだけで入力できるので、手間が省けます) 同じ件名の文書は、だいたい同じ時期に来るので、シート  コピー用『前年度』データ   を開いた際に、日付列を検索して本日と同じ日付(日付列に本日と同じ日付がなければ、前日や前々日など、近い日)の一番最初のセルをアクティブにしたいのです。 ただし、まったく同じ日に去年も同じ件名の文書がくるわけではないので、同じ日を抽出するのではなく、検索してセルをそこに合わせるということをしたいのです。 コピー用『前年度』データ   の状況は、 A列は日付です。この日付は、表示は「月日」のみですが、数式バーには2006/4/5と表示されるように、年の情報も入っています。年は無視して、月日だけで検索したいのです。 一日に20件以上受付するので、日付も同じ日が20行近く続いて次の日の受付データに変わります。その日のまとまりの中で、一番上の行に合わせたいのです。 B列は相手先が入っています。 C列は文書の件名が入っています。 つたない説明ですが、お分かりいただけたでしょうか? よろしくお願いいたします。

  • 日付の計算方法(1970年以前のデータを含む)

    過去の日付のデータがあって、今日までのの経過年月日を求めたいです。 (例)  データ 1980年1月5日  本日が2004年2月6日なので、求めたい結果は24年1月1日 日付のデータには1970年以前のデータも含まれるためタイムスタンプ(グリニッジ標準時)が使用できません。 関数などを使って簡単に求める方法はあるのでしょうか? どのようにしたら求められるかわかる方教えていただけませんでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP