AS/400 の日付がエポック日付1からの日数として内部的に保存されているとは思いません(これは、「ゼロ日付」と呼ばれるもののより一般的な用語です)。Tracy Probst が言ったように、これはネイティブ AS/400 物理ファイルの日付フィールドとはまったく異なります。2
しかし、データを抽出するために使用している方法が何であれ、エポックからの日数としてデータを提供している場合、それは重要ではありません。理想的には、AS/400 を直接見るか、できる人に尋ねて、目的の日付を確認する必要があります。AS/400 の日付が 2009-07-30 で、取得したものが 40022 である場合、エポックの日付は 1900 年 1 月 1 日であると確信できます。40024 を取得している場合、エポックは 12 月 30 日です。 1899 年。
また、Tracy が彼自身の回答についてコメントしたように、日付が一般的な数値フィールドに格納されることは非常に一般的です (これは、検索メソッドが Decimal をデータ型として報告している場合に推測されることです)。いずれにせよ、DB2 の内部日付形式を使用してください。AS/400 の数値フィールドに格納される最も一般的な日付形式は、次の形式、またはそのバリエーションであることに注意してください。
- yyyymmdd (グレゴリオ暦、ISO 4 桁の年)
- mmddyy (グレゴリオ暦、米国の 2 桁の年)
- yyyyddd (いわゆるユリウス暦、4 桁の年)
- yyddd (いわゆるユリウス暦、2 桁の年)
- yymmdd
- cyymmdd (世紀フラグを使用した IBM のクレイジーな発明)
ユリウス日付の ddd は、年の初めからの日数です。IBM のクレイジーな日付の c は、19yy の場合は 0、20yy の場合は 1 です。「The Four Hundred」にエポックからの日数を保存している人は聞いたことがありませんが、別のプラットフォームからの改宗者に遭遇したことがあるかもしれません。AS/400 のメインフレームの遺産は、人間が読める日付を強く支持します。
1 AS/400 (現在は IBM i と呼ばれています) には日付用の独自のデータ型があり、このデータ型は実際にはエポックからの日数で内部的に構成されています。しかし、そのエポックは何千年も前のことであり、20 世紀の変わり目ではなく、西暦の始まりでもありません。IBM はこの日数をスカリガー数と呼んでいますが、このことを研究しているほとんどの人にとっては、ユリウス日数と呼ばれています。私の回答の主要部分からお気づきかもしれませんが、IBM は「ユリウス」という言葉をまったく異なる意味で使用しています (ユリウス暦とは関係ありません)。つまり、IBM のいわゆる「ユリウス日」は実際にはISO 8601 の序数日付。
2日付データ型の内部形式は非常に低レベルであり、ほとんどがユーザー (ほとんどのプログラマーを含む) から隠されています。表向きはファイルの「実際の内容」を表示する DSPPFM コマンドは、少なくとも 1 つのステップは「遅すぎます」: それが報告する値は、内部の 4 バイトの「スカリガー番号」から人間が読める形式に既に変換されています。形。