6

私は、(これまでのところ)次のようなリクエストを通じて「Markit on Demand」からデータを取得する株式プログラムを作成しています。

http://dev.markitondemand.com/Api/v2/Quote/xml?symbol=aapl

これは、株式のさまざまな測定値 (シンボル、名前、最終価格、変更、タイムスタンプなど) を含むデータを xml で返します。

タイムスタンプを作成するために Java 8 で DateTimeFormatter を作成するのに問題があります。

タイムスタンプの一例:

Fri Jul 18 15:59:00 UTC-04:00 2014

これまでのところ、私が持っているパターンは次のとおりです。

EEE MMM d HH:mm:ss OOOO yyyy

お気づきの方もいらっしゃると思いますが、オフセットに問題があります。

ドキュメントから:

Offset X and x: パターン文字の数に基づいてオフセットをフォーマットします。1 文字は、'+01' のように時間だけを出力します。ただし、分がゼロ以外の場合は、'+0130' のように分も出力されます。'+0130' のように、2 文字で時と分をコロンなしで出力します。'+01:30' のように、コロンを使用して 3 文字で時と分を出力します。4 文字は、'+013015' のように、時と分、およびオプションの秒をコロンなしで出力します。5 文字は、'+01:30:15' のように、時と分、およびオプションの秒をコロンで出力します。6 文字以上は IllegalArgumentException をスローします。パターン文字 'X' (大文字) は、出力されるオフセットがゼロの場合に 'Z' を出力しますが、パターン文字 'x' (小文字) は '+00' を出力します。

Offset O: パターン文字の数に基づいてローカライズされたオフセットをフォーマットします。1 文字で、ローカライズされたオフセットの短い形式が出力されます。これは、'GMT' などのローカライズされたオフセット テキストで、時間は先頭にゼロがなく、ゼロ以外の場合はオプションで 2 桁の分と秒、およびコロン ('GMT+8' など) が含まれます。 '。4 文字は完全な形式を出力します。これは、「GMT」などのローカライズされたオフセット テキストで、2 桁の時と分フィールド、ゼロ以外の場合はオプションの 2 番目のフィールド、コロン (「GMT+08:00」など) が含まれます。それ以外の文字数は、IllegalArgumentException をスローします。

Offset Z: パターン文字の数に基づいてオフセットをフォーマットします。'+0130' のように、1 文字、2 文字、または 3 文字で時と分がコロンなしで出力されます。オフセットがゼロの場合、出力は「+0000」になります。4 文字は、Offset-O の 4 文字に相当する、ローカライズされたオフセットの完全な形式を出力します。オフセットがゼロの場合、出力は対応するローカライズされたオフセット テキストになります。5 文字は時、分を出力し、0 以外の場合はオプションで秒をコロン付きで出力します。オフセットがゼロの場合は「Z」を出力します。6 文字以上は IllegalArgumentException をスローします。

// String rawDate = Fri Jul 18 15:59:00 UTC-04:00 2014   
DateTimeFormatter PARSER_PATTERN = DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss 'UTC'XXX yyyy");
ZonedDateTime timeStamp = ZonedDateTime.parse(rawDate, PARSER_PATTERN);

これは機能しますが、なぜ ('UTC'XXX の代わりに)OOOO機能しないのか興味があります。

4

2 に答える 2

1

タイムスタンプは常に「UTC+00:00」の形式で与えられるため、文字列「UTC」を使用することにしました。

ゾーン化された日時と一致するように私が思いついた最終的なパターン:

Fri Jul 18 15:59:00 UTC-04:00 2014

EEE MMM d HH:mm:ss 'UTC'XXX yyyy

于 2014-07-20T15:01:02.157 に答える