私は、(これまでのところ)次のようなリクエストを通じて「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
機能しないのか興味があります。