1.1.13 DateTime

DateTime は、ISO 形式 (YYYY-MM-DD HH:MM:SS[.fffffffff]) のタイムスタンプを内容とする、固定長フィールドです。秒の小数点以下の値がない場合の長さは 19 桁、小数点以下の値がある場合は、その桁数に応じて 21 桁から 29 桁になります。 長さの指定がない場合、デフォルトの長さは 26 桁になります。これは移植可能な最大長であり、ISO のデフォルト YYYY-MM-DD HH:MM:SS.ffffff になります。

DateTimeフィールドの内部には常にUTC(協定世界時)の日時が入っています。UTCはGMT(グリニッジ標準時)を表す最新の用語です。LANSAは必要な場合にUTCへの変換およびUTCからの変換を自動で実行します。DateTimeの表示やデータベースへの保管にUTCまたはローカル時間のどちらを使用するかを、DUTCとSUTC属性を使用して定義します。

*Null値は 1900-01-01 00:00:00 です。

Datetimeリテラルはタイム・ゾーンを使って指定できます。またタイム・ゾーンを使わずに指定することもできます。

タイム・ゾーンを使わないリテラル形式はISO形式(上記にて説明)として知られています。ISO 形式では、DateTime リテラルは UTC 形式です。したがって、ローカル時間ではなくイギリスのグリニッジ時間を指定します。秒および秒の小数部は任意です(指定がない場合はゼロにセットされます)。この形式にはスペースが含まれるので、単一引用符で囲み、エディターが DateTime リテラルであることを正しく識別できるようにする必要があることに注意してください。例えば、'2004-02-03 00:10:30' のようになります。

タイム・ゾーンを使用したリテラル形式は ISO8601 として知られています。ISO8601 形式では、UTC を意味する Z、または UTC からの時差を表す +/-hh:mm のいずれかのデータがタイム・ゾーンに常に指定されます。ISO8601形式を標準ISO形式と区別するため、またタイム・ゾーン値を区別するために、日付と時間の間のブランクをTに置き換えます。秒の小数部は任意です(指定がない場合はゼロにセットされます)。例えば、*NULL 値は 1900-01-01T00:00:00Z です。 また、1994-11-05T08:15:30-05:00は1994年11月5日8時15分30秒(AM)で米国東部標準時(タイム・ゾーンはUTCから5時間遅れ)に相当します。1994-11-05T13:15:30Zは同じ時刻の例です。

一般的な事柄については、「1.1.1 フィールド・タイプについて」を参照してください。

フィールド定義の規則

DateTimeフィールドをリポジトリに定義するときの規則は以下のとおりです。

長さ

19桁または21から29桁の長さにすることができます。省略値は 26 桁です。小数部は自動で計算されます(19桁の場合小数部は0桁、それ以外は小数部=長さ-20桁)。

有効な鍵盤シフト

ブランク

許容される属性

AB、ASQN、CS、DUTC、FE、ISO、ND、RA、RL、RLTB、SUTC、TCYC、TCYU および TCYX.

注:ISO表示形式を選択する必要があります。

編集オプション

不可

デフォルト

*SQLNULL。デフォルトでASQNが有効になります。

フィールド定義の注意事項

  • デフォルトでは、DateTime は ISO 形式です。
  • DUTC (UTCで表示) 属性は、デフォルトでは無効です。これが有効になると、データの入出力は UTC で行われます。無効になると、データの入出力はローカル・タイムゾーンで行われます。一般的にユーザーは自身のタイム・ゾーンでのデータの表示を好みますが、タイム・ゾーンにまたがるレポートやWeb表示などの場合は、UTC形式での表示が適切な場合もあります。
  • レポート、コンポーネント (PRIM_DTIMまたはPRIM_MCTLを使用)、Web ファンクション、Web イベントなどでのDateTime データの表示や入力は、DUTC により影響を受けます。DUTCが無効の場合、DateTimeの表示と入力は、アプリケーション・コードが実行されるコンピュータのローカル・タイム・ゾーンで行われることに注意してください。
  • DUTC は、データが常に UTC で処理されるフィールド・リテラルや組み込み関数には関係しません。
  • DUTC は WAM に使用されます。DateTime は必ず ISO8601 の UTC 形式で XML に渡されます。これは XML の標準です。ビジュアライゼーションは、std_datetimeウェブレットによって処理されます。その後入力された値もISO8601のUTC形式で送信されます。
  • SUTC (UTC で保管) 属性は、デフォルトでは有効です。つまり、Datetimeフィールドを持つファイルが、データベースに書き込まれる時、またはデータベースから読み込まれる時に、Datetimeフィールドはローカル時間ではなくUTCで保管されます。これにより自動的に、世界中で実行されるアプリケーションは、認識されたタイム・ゾーンでDateTimeを処理できるようになります。LANSA以外のツールを使用してファイルにアクセスする場合は、DateTimeフィールドはローカル・タイム・ゾーンではなくUTCで保管されることに注意してください。
  • データが永久に1つのタイム・ゾーンだけに存在し、かつデータに対するすべてのインターフェースが常に同じタイム・ゾーンで実行される場合は、SUTC を無効にすることができます。SUTCを無効にすると、データは、データベース・インターフェースが実行されるコンピュータのローカル・タイム・ゾーンで保存されます。例えば、スーパーサーバー・アプリケーションでファイル・アクセスがサーバーにリダイレクトされる場合、データの読み書きはそのサーバーのローカル・タイム・ゾーンで実行されます。
  • ほとんどの外部アプリケーションがデータをローカル時間で保存するため、外部ファイルのロードで作成された DateTime フィールドの SUTC はデフォルトで無効になっています。外部データがUTCで保管されている場合は、SUTCを有効にする必要があります。

使用規則

区画タイプ

RDMLX使用可能区画

ファイル

DateTimeフィールドはRDMLXファイルでのみ使用することができます。DateTimeは実フィールドまたはキーとして使用することができます。キー・フィールドとして使用する場合は、以下の「警告」に留意してください。

論理ビュー

DateTimeをキー・フィールドとして使用することはお勧めしません。

仮想フィールド

DateTime はコード・フラグメント仮想フィールドと共に使用できます。

事前結合フィールド

不可

RDML コマンド

DateTimeは独自タイプに分類されます。RDMLコマンドの数値または英数字コマンド・パラメータには無効です。

組み込み関数

Timeを組み込み関数で使用する場合、Timeは独自のタイプに分類されるので数値または英数字の引数には無効です。

特殊値

*NULL、*HIVAL、*LOVAL、*REMEMBERED_VALUE

変換

Dateフィールドは、Alpha、Signed、Packed、String、またはCharに変換することができます。詳細については、フィールド・タイプ変換を参照してください。

使用に関する注意事項

  • 作業フィールドは TYPE(*DateTime) として定義することができます。
  • DateTime フィールドに小数点以下の秒を指定するだけの長さがない場合、四捨五入されます。
  • 組み込み関数などのアプリケーション・コードは、DateTime を常に UTC 形式で処理します。

警告

  • このフィールドをキー・フィールドとして使用する場合は、*SQLNULL および ASQN 属性を削除してください。
  • *DATETIME などのシステム変数は、値をローカル時間で提供します。これは、常にUTC形式でDateTimeを保持する、内部に保管されているDateTimeフィールドと一致していません。代わりに、Now組み込みファンクションを使用してください。

プラットフォームについて

ヒントとテクニック

  • RDMLX 用の区画を初めて有効にする時に、新しい DateTime フィールドは SUTC が有効、DUTC が無効になっています。これにより自動的に、データの表示と入力をローカル時間で行い、データベースの保存をUTCで行うマルチ・タイム・ゾーンのアプリケーションが可能になります。最初は混乱するかもしれませんが、結局これがアプリケーションで最も必要とされるものです。すべてのアプリケーションをUTCで、またはローカル時間で実行する場合は、単純にDateTimeフィールド・タイプのデフォルトのフィールド属性を変更してください。
  • DateTime フィールドの #MyDateTim を英数字引数として使用するには、#MyDateTim.asString を使って文字列形式の使用を明示するだけです。
  • DateTime フィールドを現在時刻に初期化するか、そのデフォルト値を現在時刻に設定するには、組み込みファンクション Now を使用します。これにより、フィールドが正しくUTC形式に設定されます。

次のトピックも参照してください。

1.1.11 Date

1.1.12 Time

  • No labels