ブログ

ご注意:
この情報は過去に書かれたブログ記事のキャッシュになります。最新の情報ではありませんのでご注意ください。
また、公開当時のキャッシュされたテキストのみを読めるようにした内容になっております。 公開当時の画像やデザイン情報がありませんので、デザイン上読みにくい部分がありますことをご了承ください。 なお、最新のブログはGitHubにて公開しています。

日付フォーマット"Internal"

日付2013/03/06

日付型の変数およびフィールドには,フォーマット,つまり文化圏や言語(ロケール)に合わせた様式を適用することができます。日付を文字列に変換するString関数,フォームオブジェクトの「表示フォーマット」プロパティ,OBJECT SET FORMATコマンドで指定できる日付フォーマットの定数名は,v11で改名され,System系とInternal系に整理されました。この記事では,System系とInternal系の違いを説明したいと思います。

v11アップグレードでは,改名された日付フォーマット定数が下記のように説明されていました。

システムで定義されたフォーマットに基づくフォーマットの名前はSystemで始まります。これらのフォーマットにより表示される結果は,システムの地域別設定により変わります。4Dアプリケーション内部の引数に基づくフォーマットの名前はInternalで始まります。

Internalフォーマットの根拠とされる「4Dアプリケーション内部の引数」が何であるのかは示されていません。また,Systemフォーマットとシステムの地域別設定の関係もあまりはっきりとは述べられていません。また,デザインリファレンスには,このように記述されていました。

数値フォーマットや文字フォ-マットと異なり,日付表示フォ-マットは4Dの組み込みフォーマットのなかから選択しなければなりません。実際の表示はシステム設定により異なります。データ入力の際は選択した表示フォーマットとは関係なく,YYYY/MM/DD形式で日付を入力します。

つまり,System=可変,Internal=固定というわけでもなく,システム設定次第では,Internalフォーマットが実際に表示する内容も変化するということ示唆されています。ほんとうに固定されているのは,どちらにも属さない,ISOフォーマットだけだということです。それでは,SystemとInternalを区別しているのは何なのか,という疑問が生じます。

System vs Internal
はじめに,System/Internalという接頭辞は,v11で定数改名の際に導入された命名上の区別であり,実際の定数は2004時代から変わっていないという点に留意する必要があります。ドキュメントには,下記のような定数対比表が記載されていました。

v11定数
旧称

System date short
Short
1999/03/25

System date abbreviated
Abbreviated
1999年3月25日

System date long
Long
1999年3月25日

Internal date short special
MM DD YYYY
99/03/25

Internal date long
Month Day Year
March 25, 1999

Internal date abbreviated
Abbr Month Day
Mar 25, 1999

Internal date short
MM DD YYYY Forced
1999/03/25

ISO Date Time(2)
ISO Date Time
1999-03-25T00:00:00

旧称では,フォーマットの文字列長を説明した表現,年月日の順序を示した表現が混在しており,統一されていなかったのに対し,新名称では,年月日の順序(MM DD YYYYなど)が完全に排除されていることに気づきます。年月日の順序は,システム設定に左右されるため,定数名に含めるのは不適切であると判断されたからです。 Short,Longなどの表現は,Macシステム環境設定の「短・中・すべて」,Windowsコントロールパネル(地域と言語)の「短い形式・長い形式」に対応しています。

例からも分かるように,Internal系のlongとabbreviatedは,システム言語に関係なく,英語表記で月の名前が出力されます。この変換には,4D内部のアルゴリズムが適用されているという意味で,これらの定数はInternalです。

少し分かりづらいのは,Internal系のshortです。通常,System系のshortと同じ内容が出力されるからです。この定数の意図は,むしろ旧称のほうが明快でした。この定数は,YYYY forced,つまり,システム設定に関係なく,強制的に4桁で年を表示するためのものです。その他の点は,System系とInternal系のshortに違いはありません。

注意しなければならないのは,数字と区切り文字で構成されたフォーマットは,たとえInternal系であっても,年月日の順序や区切り文字は,固定されていない,という点です。日付の区切り文字,および年月日の順序は,Internal date shortであっても,システム設定を継承します。

Macの日付区切り文字はピリオド?
12.5では,日付フォーマットにInternal date shortが指定されたとき,日付の区切り文字にピリオドが使用される,という問題がありました。この問題は,12.5 HF1で修正され,システムの区切り文字が使用されるようになりました。

4Dが認識しているシステムの日付区切り文字・年月日の順序・日付フォーマットは,GET SYSTEM FORMATコマンドで確認することができます。一般的な日本語システムであれば,この文字はピリオドではなく,スラッシュとなっています。もちろん,ピリオドにカスタマイズすることは自由です。そうすれば,4Dの日付フォーマットにもピリオドが採用されるようになります。

あるいは,defaultsコマンドをLAUNCH EXTERNAL PROCESSで実行し,プロパティリストの値を調べるということもできます。