WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

日時をストリングとしてフォーマット設定および構文解析する

以下に、パターン文字のストリングを使用して dateTime 形式を指定する方法に関する情報を記載します。

日付または時刻をストリングに変換するとき、変換を誘導するための形式のパターンを適用する必要があります。 この形式パターンを適用して、日付または時刻からストリングに変換したり、ストリングを日付または時間に構文解析したりします。

変換 (例えば、日時からストリングへ) の際に、パターンまたはトークンのセットが対応するソースに置き換わります。 以下の図は、パターンを使用して dateTime ソースをフォーマットして文字ストリング出力を生成する方法について示しています。

この図は、dateTime ソースおよび形式のパターンによって生成される出力ストリングを示しています。

ストリングが構文解析されるとき (例えば、 そのストリングを dateTime に変換するときなど)、パターンまたはトークンのセットが使用されて、 ターゲットの dateTime のどの部分がストリングのどの部分によって表現されているのかを判別します。 以下の図は、これを行う方法を示しています。

この図は、ストリング・データ・ソースおよび形式のパターンによって生成される dateTime 出力を示しています。

構文

式のパターンは、以下のように定義されます。

構文図を読む構文図をスキップする
   .------------.   
   V            |   
>>---+-symbol-+-+----------------------------------------------><
     '-string-'     

それぞれの意味は以下のとおりです。
symbol
セット adDeEFGhHIkKmMsSTUwWyYzZ 内の文字。
string
単一引用符で囲まれた、一連の文字。 ストリング内に単一引用符が必要な場合には、2 つの単一引用符 (") を使用します。

dateTime をストリングとしてフォーマットするための文字

以下の表は、dateTime に関連してストリングをフォーマットまたは構文解析するためのパターンに使用できる文字をリストしています。 表の後に、表中の例の詳細について説明する注記があります。

記号 意味 表示内容
a AM または PM のマーク文字 テキスト 入力は、am、AM、pm、PM。 出力は、AM または PM
d 日 (1 から 31) 数値 1, 20
dd 日 (01 から 31) 数値 01, 31
D 日 (1 から 366) 数値 3, 80, 100
DD 日 (01 から 366) 数値 03, 80, 366
DDD 日 (001 から 366) 数値 003
e 曜日 (1 から 7)1 数値 2
EEE 曜日1 テキスト Tue
EEEE 曜日1 テキスト Tuesday
F 月単位の曜日 (1 から 5)2 数値 2
G Era テキスト BC または AD
h AM または PM の時間 (1 ~ 12) 数値 6
hh AM または PM の時間 (01 から 12) 数値 06
H 24 時間形式での時刻 (0 から 23)3 数値 7
HH 24 時間形式での時刻 (00 から 23)3 数値 07
I ISO8601 日時 (最大 yyyy-MM-dd'T'HH:mm:ss.SSSZZZ)4 テキスト 2006-10-07T12:06:56.568+01:00
IU ISO8601 日時 (I と同様。ただし時間帯が +00:00 であれば ZZZ の出力は "Z")4 テキスト 2006-10-07T12:06:56.568+01:00, 2003-12 -15T15:42:12.000Z
k 24 時間形式での時刻 (1 から 24)3 数値 8
kk 24 時間形式での時刻 (01 から 24)3 数値 08
K AM または PM の時間 (0 ~ 11) 数値 9
KK AM または PM の時間 (00 から 11) 数値 09
m 数値 4
mm 数値 04
M 数字による月 数値 5, 12
MM 数字による月 数値 05, 12
MMM 名前による月 テキスト Jan、Feb
MMMM 名前による月 テキスト January、February
s 数値 5
ss 数値 05
S デシ秒5 数値 7
SS センチ秒5 数値 70
SSS ミリ秒5 数値 700
SSSS 0.0001 秒5 数値 7000
SSSSS 0.00001 秒5 数値 70000
SSSSSS 0.000001 秒5 数値 700000
T ISO8601 時間 (最大 HH:mm:ss.SSSZZZ)4 テキスト 12:06:56.568+01:00
TU ISO8601 時間 (T と同様。ただし、時間帯の +00:00 は 'Z' に置き換わる)4 テキスト 12:06:56.568+01:00, 15:42:12.000Z
w 週 (年単位)6 数値 7, 53
ww 週 (年単位)6 数値 07, 53
W 週 (月単位)7 数値 2
yy 8 数値 06
yyyy 8 数値 2006
YY 年: 週と共に使用する場合のみ6 数値 06
YYYY 年: 週と共に使用する場合のみ6 数値 2006
zzz 時間帯 (省略名)9 テキスト EST
zzzz 時間帯 (完全名) テキスト 東部標準時
Z 時間帯 (+/-n) テキスト +3
ZZ 時間帯 (+/-nn) テキスト +03
ZZZ 時間帯 (+/-nn:nn) テキスト +03:00
ZZZU 時間帯 (ZZZ と同様。"+00:00" は "Z" に置き換わる) テキスト +03:00, Z
ZZZZ 時間帯 (GMT+/-nn:nn) テキスト GMT+03:00
ZZZZZ 時間帯 (ZZZ と同様。ただしコロンはない) (+/-nnnn) テキスト +0300
' テキストのエスケープ   'ユーザー・テキスト'
" (2 個の単一引用符) エスケープされたテキスト内の単一引用符   'o"clock'

dateTime オブジェクトの表示は、指定するシンボルによって異なります。

注: 上の表には、以下の注が適用されます。
  1. day in week フィールドには、以下の値を指定できます。
    • 1 - 日曜日
    • 2 - 月曜日
    • 3 - 火曜日
    • 4 - 水曜日
    • 5 - 木曜日
    • 6 - 金曜日
    • 7 - 土曜日
  2. 2006 年 7 月 12 日は、7 月の第 2 水曜日なので、 書式制御ストリング yyyy MMMM EEEE F を使用して 2006 July Wednesday 2 と表せます。この形式は、2006 年 7 月の第 2 週の水曜日 (これは 2006 年 7 月 5 日) ではありません。この書式制御ストリングは yyyy MMMM EEEE W です。
  3. 24 時間フィールドが競合する am/pm フィールドとともに指定される場合、結果があいまいになる場合があります。
  4. ISO8601、I および T 日時トークンを参照してください。
  5. 秒の端数は大文字 S によって表されます。長さは入力時のフォーマット記号の数値と暗黙的に一致している必要があります。 例えば、ss SSS または ss.SSS などの書式制御ストリングは、秒とミリ秒を表します。 しかし、書式制御ストリング ss.sss は (秒の) 反復フィールドを表し、ピリオド (.) の後の値は秒の端数ではなく、2 番目のフィールドと見なされます。 出力は指定された長さに切り捨てられます。
  6. ESQL では、1 年の最初の日は最初の週に属するものと想定します。ですから、1 月 1 日は必ず第 1 週に含まれます。 結果として、1 つの年の中で相対的に指定される日付が、別の年の日付である可能性もあります。 例えば、"EEEE' week 'w' 'YYYY" を使用して構文解析される「Monday week 1 2005」は、2004 年 12 月 27 日ということになります。2005 年の第 1 週の月曜日は、2004 年の日付であるためです。

    y シンボルを使用すると、調整は行われず、年末前後の日付の場合は予測不能な結果になることがあります。 例えば、ストリング「2005 01 Monday」が以下のように形式設定される場合、

    • 形式制御ストリング YYYY ww EEEE では、「2005 年の第 1 週の月曜日」は 2004 年 12 月 27 日と正しく解釈されます。
    • 形式制御ストリング yyyy ww EEEE では、「2005 年の第 1 週の月曜日」は 2005 年 12 月 27 日と誤って解釈されます。
  7. 月の第 1 週と最終週に、前後の月の日が含まれることがあります。 例えば、2006 年 7 月 31 日月曜日を 2006 年 8 月第 1 週の月曜日 として表せます。 この場合は、書式制御ストリング yyyy MM W EEEE を使用して 2006 08 1 Monday と指定します。
  8. 年は特殊ケースとして扱われます。
    • 出力時には、y の個数が 2 の場合は、年は 2 桁に切り捨てられます。 例えば、yyyy1997 となる場合、yy97 となります。
    • 入力時には、2 桁の年のために世紀ウィンドウが 53 に固定されます。 例えば、入力された日付が 52 のとき年の値は 2052 になり、入力された日付が 53 では出力の年の値は 1953 に、97 では 1997 になります。
  9. zzz オプションを使用すると、結果があいまいになる可能性があります。 例えば BSTBangladesh Standard Time (バングラデシュ標準時) とも British Summer Time (イギリス夏時間) とも解釈できます。 互換性を保つために、WebSphere® Message Broker では前者の解釈が使用されます。

    この問題を避けるために、zzzz オプションは正しく定義されている名前と併用してください。例えば、Europe/London、Asia/Dhaka、または America/Los_Angeles などです。

ISO8601、I および T 日時トークン

日時値が ISO8601:2000「日時の表記」規格に準拠している場合は、フォーマット・シンボル I および T を使用することを考慮してください。これらは、ISO8601 規格の以下のサブセットと一致します。

フォーマット・シンボル I および T は、単独で使用してください。

以下の表は、出力形式と論理データ・タイプの関連性を示しています。

論理モデル・データ・タイプ ESQL データ・タイプ 出力形式
xsd:dateTime TIMESTAMP または GMTTIMESTAMP yyyy-MM-dd'T'HH:mm:ss.SSSZZZ
xsd:date DATE yyyy-MM-dd
xsd:gYear INTERVAL yyyy
xsd:gYearMonth INTERVAL yyyy-MM
xsd:gMonth INTERVAL --MM
xsd:gmonthDay INTERVAL --MM-dd
xsd:gDay INTERVAL ---dd
xsd:time TIME / GMTTIME 'T'HH:mm:ss.SSSZZZ
注:
  • 入力時は I と T の両方で、協定世界時 (UTC) との時差がゼロであることを示す '+00:00' および 'Z' の両方が受け入れられますが、出力時は常にどちらの場合も '+00:00' が生成されます。 出力時に 'Z' を常時生成したい場合には、代わりに IU または TU フォーマット・シンボルを使用してください。
  • ZZZ では、協定世界時 (UTC) との時差がゼロであることを示すために常に '+00:00' が書き込まれます。 出力時に 'Z' を常時生成したい場合には、代わりに ZZZU を使用してください。

出力での入力 UTC 形式の使用

dateTime をストリングとして含む論理タイプ xsd:dateTime または xsd:time のエレメントまたは属性は、Z シンボルまたは時間帯 +00:00 のどちらかを使用することにより、協定世界時 (UTC) を指定できます。 入力の際に、MRM パーサーはそのようなエレメントおよび属性の UTC 形式を記憶します。 出力の際に、エレメントまたは属性の「デフォルトの日時形式」プロパティーを使用することにより、Z または +00:00 を表示するかどうかを指定できます。 またはその代わりに、メッセージ・セット・プロパティー「出力時に入力 UTC 形式を使用」を選択することにより、入力 UTC 形式を保存することもできます。 このプロパティーが選択されている場合には、UTC 形式が出力メッセージに保存され、「日時形式」プロパティーにより暗黙的に示される形式をオーバーライドします。

夏時間調整時刻と CAST 関数について

ブローカーが GMT 以外のタイム・ゾーンで稼働している場合、ブローカーは提供される時刻について、CAST 関数により、夏時間調整時刻 (DST) オフセットを計算します。 CAST がオフセットを正しく計算するためには、CAST に渡される時刻には、Z パラメーターとしてそれに関連付けられたタイム・ゾーンがなければなりません。 渡される値に関連付けられたタイム・ゾーンがない場合、時刻は GMT 時に変換され、ローカルのタイム・スタンプとしては扱われません。

さらに、CAST を使用してストリングを時刻値にキャストするときは、DST オフセットは現行システム日付を使用して計算されます。 ストリングを時刻変数にキャストし、DST を特定の日付用に計算するには、日付も指定する必要があります。

例えば、timeValue='10:00:00' の場合、中央部夏時間ゾーンにあるブローカーで実行される以下のコードは、タイム・ゾーン ID が指定されていないので、時刻を GMT に変換します。
DECLARE castTime TIME;
SET castTime = CAST (timeValue AS TIME FORMAT timePattern)
castTime 変数が、例えば以下のように後続のコードで使用されるとしても、時刻が再度 GMT に変換されることはありません。
CAST(castDate, castTime AS GMTTIMESTAMP);

次の表は、日時形式のいくつかの例を示しています。

形式のパターン 結果
"yyyy.MM.dd 'at' HH:mm:ss ZZZ" 2006.07.10 at 15:08:56 -05:00
"EEE, MMM d, "yy" Wed, July 10, '06
"h:mm a" 8:08 PM
"hh o"clock a, ZZZZ" 09 o'clock AM, GMT+09:00
"K:mm a, ZZZ" 9:34 AM, -05:00
"yyyy.MMMMM.dd hh:mm aaa" 1996.July.10 12:08 PM

MRM ドメイン内での使用

MRM 内では、日時の論理タイプを持つエレメントを定義することができます。

日時エレメントが構文解析される場合、CURRENT_TIME または CURRENT_TIMESTAMP の ESQL データ型を持つメッセージ・ツリー内にフィールドが作成されます。 しかし、CURRENT_TIME および CURRENT_TIMESTAMP のデータ型には時間帯情報を保管する機能がないため、MRM は入力された時間帯やブローカーの時間帯に従って時間を調整することはありません。

CURRENT_TIME および CURRENT_TIMESTAMP のデータ型は時間帯情報を保管できませんが、MRM はこの情報を基本フィールドの一部として保管します。 これは、フィールドがメッセージ・ツリー間でコピーされると時間帯情報がともにコピーされて、この情報を出力時に保存できるようになることを意味します。

フィールドが同じ名前のフィールドにコピーされる場合のみ、この情報が保存されることに注意してください。

ただし、新規フィールドが元フィールドから派生させられる場合は、新規フィールドには時間帯情報がありません。 これは、そのようなフィールドが文字としてキャストされる場合、新規フィールドはブローカーの時間帯を想定しますが、その値は、入力時間帯とブローカーの時間帯の間に差があっても調整されないことを意味します。

例えば、2009-02-20T06:08:07-08:00 を含んでいる入力時間帯エレメントは、入力メッセージ・ツリーから出力メッセージ・ツリーにコピーされて、出力メッセージ内に全く同じフォーマットで表示されている可能性があります。 しかし、エレメントが文字としてキャストされる場合は、GMT を実行しているブローカーによりフォーマット IU が使用されて、結果は 2009-02-20T06:08:07.000Z になります。

特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:47:28


参照トピック参照トピック | バージョン 8.0.0.5 | ak05616_