日付/時刻マスクとフォーマット指定子
- TIMESTAMP または INTERVAL 変数を宣言する場合、変数の内部形式を定義するためにマスク を指定できます。 EGL は、変数の値に準じてマスク情報を移動させます。 (EGL は常に DATE 変数を yyyyMMdd、TIME 変数を HHmmss として保存します)。
- 値を日付/時刻変数に割り当てるために文字列を使用する場合は、構文解析フォーマット を使用します。
- 日付/時刻変数の内部値を表示または出力する場合、表示フォーマット を使用します。
これらの変数の内部値について詳しくは、『プリミティブ・データ型』を参照してください。
INTERVAL マスクの作成
- y
- 間隔の年数を表す 0 桁から 9 桁までの数字。
- M
- 間隔の月数を表す 0 桁から 9 桁までの数字。M がマスク内の最初の文字でない場合、 指定できるのは最大 2 桁までです。
デフォルトのマスクは yyyyMM です。
- d
- 間隔の日数を表す 0 桁から 9 桁までの数字。
- H
- 間隔の時間数を表す 0 桁から 9 桁までの数字。H がマスク内の最初の文字でない場合 、指定できるのは最大 2 桁までです。
- m
- 間隔の分数を表す 0 桁から 9 桁までの数字。m がマスク内の最初の文字でない場合、指定できるのは最大 2 桁までです。
- s
- 間隔の秒数を表す 0 桁から 9 桁までの数字。s がマスク内の最初の文字でない場合、指定できるのは最大 2 桁までです。
- f
- それぞれが秒の小数部を表す 0 から 6 桁の数字。最初の数字は 10 分の 1 を表し、2 番目は 100 分の 1 を表し、以下同様です。 f がマスク内の最初の文字でない場合でも、指定できるのは最大 6 桁までです。
yyyyyyMM
yyyyyy
MM
ddHHmmssffffff
HHmmssff
mmss
HHmm
// 無効
ddmmssffffff
HHssff
TIMESTAMP マスクの作成
- yyyy
- 年を表す 4 桁の数字。範囲は 0000 から 9999 までです。
- MM
- 月を表す 2 桁の数字。範囲は 01 から 12 までです。
- dd
- 日を表す 2 桁の数字。範囲は 01 から 31 までです。
- HH
- 時を表す 2 桁の数字。範囲は 00 から 23 までです。
- mm
- 分を表す 2 桁の数字。範囲は 00 から 59 までです。
- ss
- 秒を表す 2 桁の数字。範囲は 00 から 59 までです。
- f
- それぞれが秒の小数部を表す 0 から 6 桁の数字。最初の数字は 10 分の 1 を表し、2 番目は 100 分の 1 を表し、以下同様です。
デフォルトのマスクは yyyyMMddHHmmss です。
- マスクの先頭または末尾で所定の種類の文字を使用しなくてもかまいませんが、中間の文字をスキップすることはできません。
- 以下のようなマスクが有効です。
yyyyMMddHHmmss yyyy MMss
- 以下のマスクは、中間の文字が欠落しているため無効です。
// 無効 ddMMssffffff HHssff
表示または構文解析フォーマットの作成
- strLib.defaultDateFormat
- strLib.defaultTimeFormat
- strLib.defaultTimestampFormat
構文解析フォーマットの規則は、表示フォーマットの規則と同じであり、例外については以下の規則として示します。
- strLib.formatDate()
- strLib.formatTime()
- strLib.formatTimestamp()
- 作成した独自のフォーマット・パターン。
- EGL が定数として定義している複数の標準パターンのいずれか (「formatDate()」strLib 関数を参照)。
- 変換する変数の型に応じたデフォルト・フォーマット (strLib.defaultDateFormat など)。
ユーザー独自のフォーマット・パターンは、日付または時刻の構成要素を示す文字を使用して作成します。 日付または時刻のコンポーネントとしてテキストを構文解析することなく、日付/時刻ストリングに文字を組み込むには、その文字 (単数または複数) を単一引用符で囲んでください。 日付、時刻、またはタイム・スタンプで単一引用符を表示する場合は、単一引用符を 2 個使用します。
次の表では、パターン内の文字およびその値をリストしています。
文字 | 日付または時刻コンポーネント | 型 | 例 |
---|---|---|---|
G | 紀元指定子 | テキスト | AD |
y | 年 | 年 | 1996; 96 |
M | 1 年のうちの月 | 月 | July; Jul; 07 |
w | 1 年のうちの週 | 数値 | 27 |
W | 1 カ月のうちの週 | 数値 | 2 |
D | 1 年のうちの日 | 数値 | 189 |
d | 1 カ月のうちの日 | 数値 | 10 |
F | 週の曜日 | 数値 | 2 |
E | 週の曜日 | テキスト | Tuesday; Tue |
a | AM/PM マーカー | テキスト | PM |
H | 1 日のうちの時間 (0 から 23) | 数値 | 0 |
k | 1 日のうちの時間 (0 から 24) | 数値 | 24 |
K | AM/PM での時間 (0 から 11) | 数値 | 0 |
h | AM/PM での時間 (1 から 12) | 数値 | 12 |
m | 1 時間のうちの分数 | 数値 | 30 |
s | 1 分のうちの秒数 | 数値 | 55 |
S | ミリ秒 (出力) | 数値 | 978 |
f | ミリ秒 (構文解析) | 数値 | 978 |
z | タイム・ゾーン | 一般タイム・ゾーン | 太平洋標準時; PST; GMT-08:00 |
Z | タイム・ゾーン | RFC 822 タイム・ゾーン | -800 |
C | 世紀 | 世紀 | 20; 21 |
パターン内で連続して使用される複数の同一文字によって、EGL がストリング内で対応する数字、文字、または両方を解析する方法が決まります。 解釈は、文字のタイプによって異なり、またパターンがフォーマット設定または構文解析のいずれに使用されるかに応じても異なります。次のリスト は、文字の型、およびこれらの文字の数量の違いが、それらの解釈方法にどのように影響するかを示しています。
- テキスト
- 出力設定の場合、文字数が 4 文字より多い場合は、フル書式が使用されます。4 文字以上のときは、可能な場合、略語が使用されます。 構文解析では、パターン文字の数に関係なく、両方の書式が受け入れられます。
- 数値
- 出力の場合、パターン文字の数は、最小桁数を表します。 数字を指定の長さに短くする場合は、ゼロが追加されます。 構文解析では、2 つの隣接するフィールドを分離するために必要でないかぎり、パターン文字の数は無視されます。
- 年
- フォーマット設定の場合、パターン文字の数が 2 であれば、年が 2 桁に切り捨てられます。
その他の場合は、年は数値型として解釈されます。
構文解析では、パターン文字の数が 2 でない場合、桁数に関係なく、年は文字どおりに解釈されます。 例えば、パターン MM/dd/yyyy に値 01/11/12 を割り当てると、January 11, 12 A.D. と解析されます。同じパターンに値 01/02/3 または 01/02/0003 を割り当てると、January 2, 3 A.D. と解析されます。同様に、同じパターンに値 01/02/-3 を割り当てると、January 2, 4 B.C. と解析されます。
構文解析では、パターンが yy の場合、パーサーにより、現在の年を基準としてフル年が判別されます。 パーサーは、2 桁で表された年を、処理時点の 80 年前から 20 年後以内と想定します。例えば、現在の年が 2007 年である場合、 パターン MM/dd/yy に値 01/11/12 を割り当てると 2012 年 1 月 11 日と解析し、 値 05/04/64 を割り当てると 1964 年 5 月 4 日と解析します。
- 月
- 文字パターンの数が 3 以上の場合、月はテキスト型として解釈されます。その他の場合は、年は数値型として解釈されます。
- ミリ秒
- INTERVAL または TIMESTAMP 変数をフォーマットするには、SSSS を使用します。
(変数を宣言する場合は、代わりに ffff を使用します。)
以下に例を示します。
t TIMESTAMP( "ssffff" ); s STRING = StrLib.formatTimestamp( t, "ssSSSS" );
- 一般タイム・ゾーン
- 一般タイム・ゾーンは、名前が付けられている場合、テキスト型として解釈されます。GMT オフセット値を表すタイム・ゾーンの場合、次の構文規則が使用されます。
GMTOffsetTimeZone = GMT 符号 時間 分
- 符号
- + または -
- 時間
- 0 から 23 までの 1 桁または 2 桁の数値。書式はロケールに依存せず、 ユニコード規格の基本ローマ字ブロックから取得する必要があります。
- 分
- 00 から 59 までの 2 桁の数値。書式はロケールに依存せず、 ユニコード規格の基本ローマ字ブロックから取得する必要があります。
構文解析では、RFC 822 タイム・ゾーンも許容されます。
- RFC 822 タイム・ゾーン
- フォーマット設定には、RFC 822 4 桁タイム・ゾーン形式が使用されます。
RFC822TimeZone = 符号 TwoDigitHours 分
TwoDigitHours は、00 から 23 までの 2 桁の数値でなければなりません。 その他の定義は、一般タイム・ゾーンと同じです。
構文解析では、一般タイム・ゾーンも許容されます。
- 世紀
- 次の計算結果を表す数値型として表示されます。4 桁の西暦年を 100 で除算し、 余りは無視されます。
次の表では、米国のロケールで解釈される日付と時刻パターンのサンプルの一部を記載しています。すべて同じ日付、4 July、2001、午後 12:08:56、太平洋夏時間 (Pacific Daylight Time) を使用しています。
日付と時刻のパターン | 結果 |
---|---|
yyyy.MM.dd G 'at' HH:mm:ss z | 2001.07.04 AD at 12:08:56 PDT |
EEE, MMM d, ''yy | Wed, Jul 4, '01 |
h:mm a | 12:08 PM |
hh 'o''clock' a, zzzz | 12 o'clock PM, Pacific Daylight Time |
K:mm a, z | 0:08 PM, PDT |
yyyyy.MMMMM.dd GGG hh:mm aaa | 02001.July.04 AD 12:08 PM |
EEE, d MMM yyyy HH:mm:ss Z | Wed, 4 Jul 2001 12:08:56 -0700 |
yyMMddHHmmssZ | 010704120856-0700 |
カレンダー指定子
「日付/時刻」フォーマット指定子には、カレンダー指定子を組み込むこともできます。 これらの指定子は EGL が入力する日付ストリングの構文解析、 または出力する日付ストリングのフォーマットに使用するカレンダー・システムを示します。EGL は、指定したカレンダーや、DATE、TIME、TIMESTAMP 変数の内部値の、ストリング・データ間における変換を実行します。
カレンダー指定子 | カレンダー |
---|---|
Bu | 仏教暦 |
Ch | 中国暦 |
Gr | グレゴリオ暦 |
He | ヘブライ暦 |
Is | イスラム暦 |
Ja | 和暦 |
各種のカレンダー・システムでローカライズされた日付ストリングは、他のロケールでは出力できない場合があるため、この問題は複雑になりがちです。 カレンダーが異なると、使用する年号指定子のほか、年の番号付けの起点も異なるので、多くの場合、特定のローカライズされた環境でしか正しく表示されません。 例えば、和暦の元号日付システムは、旧形式のユリウス暦 (グレゴリオ暦より数日遅れ) 同様、日本の天皇の治世年により決まります。
myDate DATE;
myJapaneseDate STRING;
strLib.defaultDateFormat = "Gryyyy/MM/dd";
myDate = "1912/08/13";
myJapaneseDate = formatDate(myDate,"JaGyy/MM/dd");
ご使用のシステムが日本向けにローカライズされている場合、strLib.defaultDateFormat を和暦を使用するように設定したり、myDate を和暦の日付に設定したりすることができます。
EGL は日付ストリングをデフォルトの日付形式に準拠して構文解析し、8 桁のグレゴリオ暦の日付として保存します。以下の表は、グレゴリオ暦の日付を上で示した日本元号形式に変換した例を示しています。 大括弧内の名前は、所定の日本元号を示す日本語の文字 (4 つの 2 バイト) を表します。
グレゴリオ暦の日付 | 日本元号に基づく日付 |
---|---|
1868/09/20 | [明治]01/09/08 |
1912/08/12 | [明治]45/07/30 |
1912/08/13 | [大正]01/07/31 |
1927/01/07 | [大正]15/12/25 |
1927/01/08 | [昭和]01/12/26 |
1989/01/20 | [昭和]64/01/07 |
1989/01/21 | [平成]01/01/08 |
2005/01/14 | [平成]17/01/01 |
EGL は、Java™ バージョンの International Components for Unicode ライブラリー (ICU4J) を使用して、入力および表示に必要な日付変換を行っています。 しかし、EGL は、常に日付をグレゴリオ暦形式の 8 桁を使用して保存します。 つまり、タイ語のアプリケーションでは仏教暦の日付が必要になりますが、 EGL では変換に ICU4J を使用することで、その日付を 8 桁のグレゴリオ暦形式で保存しているということです。 アプリケーションは、使用するパターンの整合性を保つため、この処理はプログラマーおよびユーザーの両方に対し非表示のままになっています。
互換性
プラットフォーム | 問題 |
---|---|
COBOL 生成 |
|
DB2® | この表内の『COBOL 生成』の項目を参照してください。 |
Rich UI | 『Rich UI の日時サポート』を参照してください。 |