日付や時刻の操作には、4Dの内部リソースや OSの設定に基づいた、様々な表現のための専用フォーマットがたびたび必要になります。
通常は、規定のフォーマットで十分ですが、地理的に異なる場所や特殊な要件に対応するため、カスタムフォーマットが不可欠な場合もあります。4D 20 R4 では、このようなニーズに対応するために、大きな進歩がありました。
HDI: 日付と時間のフォーマット
どのような利点がありますか?
冒頭で述べたように、規定フォーマットの選択肢は限られています。海外に向けた文書を作成したい場合、既存のフォーマットは、相手が希望するものではない可能性が高いでしょう。したがって、日付や時間をどのように表示するか、最終的には小数点以下まで定義することが不可欠です。
さらに、週番号や四半期表記、年始からの日数など、新たな可能性も提供されています!
フォーマットか変換か?
日付と時間のフォーマットには 2つの方法があります。
1つは、フォームで表示モードを定義する方法です。この場合、日付は日付値のままです。同じフォームや文書内で何度でも異なる表現で表示することができます。
もう 1つは、Stringコマンドを使って日付を文字列に変換する方法です。
どちらの場合も、希望する結果を表すフォーマット文字列を定義しなければなりません。
一般的なフォーマット設定チェーン
表示フォーマットを適用する場合も、Stringコマンドで文字列を作成する場合も、必要なパラメーター (これも文字列) は共通です。
“yyyy/MM/dd eeee”、”QQQQ”、それとも “HH:mm:ss”?
これが最もエキサイティングな部分で、ほとんど無限の可能性が広がります。要素の順序や表現方法を決められるだけでなく、以前は簡単にアクセスできなかった情報も活用することができます。
ドキュメントには、各文字やその組み合わせによる定義と結果の詳細が記載されていますが、日付の例をいくつか挙げてみましょう。
2000/06/15 -> “QQQQ” -> “第2四半期” (フランス語で “2è trimestre” のようにローカライズされます!)
2001/03/17 -> “D” -> “76” (年始から 76日目、うるう年では 77日目)
1954/03/17 -> “w” -> “12” (第12週。年によって異なります)
1954/03/17 -> “eeee” -> “水曜日” (ローカライズ済み)
時間の例:
15:00:00 -> “a” -> “午後”
18:00:00 -> “K” -> “6”
13:30:15 -> “aa hh:mm O” -> 午後 01:30 GMT+9
最後に…フォーマット文字列には追加の文字列を含められますが、”a” と “z”、または “A” と “Z” の間の文字の場合には、パターン記号として解釈されないように一重引用符で囲む必要があります。
15:30:00 -> “HH ‘hours and’ mm ‘minutes'” -> “15 hours and 30 minutes”
Stringコマンド
Stringコマンドは、これまで通り使用できる数値定数 (System date short など) に加えて、フォーマットされた文字列を第2パラメーターとして受け付けるように変更されました。
注記: String コマンドは日付の他に、任意で時間を受け付けます!
String ( expression {; format {; addTime}} ) -> Function result
つまり、日付と時間のフォーマットを自由に設定できるようになったのです!
$date:=!1954-03-17!
$time:=?13:24:35?
$format:="EEEE dd MMMM yyyy 'à' HH 'heures,' mm 'minutes et' ss 'secondes'"
$result:=string($date;$format;$time)
フランスのシステムでは、”mercredi 17 mars 1954 à 13 heures, 24 minutes et 35 secondes” と表示されます!
OBJECT SET FORMATコマンド
このコマンドも同じ原理で、フォームに表示される日付や時間のフォーマットをプログラミングで定義することができます。以下の例に示すように、シンタックスはまったく同じです:
OBJECT SET FORMAT(*; "myDate"; "(yyyy) MMMdd日") // (2017) 12月12日
OBJECT SET FORMAT(*; "mytime"; "hh'h' mm'min' ss'sec.'") // 15h 12min 17sec.
インターフェース上で
もちろん、OBJECT SET FORMATコマンドでプログラムできることは、すべてフォーム上で直接設定できます。日付と時間の利用可能なフォーマットリストには、希望するフォーマット文字列を入力するための “カスタム” 行が追加されました。このフォーマット文字列は上記コマンドと同じように構成されます。
日付と時間フォーマットをカスタムに設定した場合の新しいパターン入力欄
まとめ
この新機能により、日付や時間を表示する際の自由度が大幅に向上しました。アプリケーションのコードをシンプルにすることで、開発時間を短縮し、よりよいフォームの最適化が可能になります。この機能の詳細についてはドキュメントを参照してください。