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は同じ時刻の例です。
一般的な事柄については、「フィールド・タイプについて」を参照してください。
フィールド定義の規則
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 はWAMSに使用されます。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を有効にする必要があります。
使用規則
区画タイプ |
|
ファイル |
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形式に設定されます。
さらに、次のトピックも参照してください。