我正在编写一个股票程序,该程序(到目前为止)通过如下请求从“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
我相信你们中的一些人可以发现,我在偏移方面遇到了麻烦。
从文档:
偏移量 X 和 x:这会根据模式字母的数量来格式化偏移量。一个字母仅输出小时,例如“+01”,除非分钟不为零,在这种情况下也会输出分钟,例如“+0130”。两个字母输出小时和分钟,不带冒号,如'+0130'。三个字母输出小时和分钟,带有冒号,例如'+01:30'。四个字母输出小时和分钟以及可选的秒,不带冒号,例如'+013015'。五个字母输出小时和分钟以及可选的秒,带有冒号,例如'+01:30:15'。六个或更多字母会引发 IllegalArgumentException。当要输出的偏移量为零时,模式字母'X'(大写)将输出'Z',而模式字母'x'(小写)将输出'+00','
偏移量 O:这会根据模式字母的数量格式化本地化偏移量。一个字母输出本地化偏移量的简写形式,即本地化偏移量文本,例如“GMT”,小时不带前导零,如果非零,则可选两位数分钟和秒,以及冒号,例如“GMT+8” '。四个字母输出完整形式,即本地化偏移文本,例如“GMT”,带有 2 位小时和分钟字段,如果非零,则可选第二个字段和冒号,例如“GMT+08:00”。任何其他字母计数都会引发 IllegalArgumentException。
偏移 Z:这会根据图案字母的数量来格式化偏移。一个、两个或三个字母输出小时和分钟,不带冒号,例如'+0130'。当偏移量为零时,输出将为“+0000”。四个字母输出本地化偏移的完整形式,相当于四个字母的Offset-O。如果偏移量为零,则输出将是相应的本地化偏移量文本。五个字母输出小时、分钟,如果非零,则可选秒,带冒号。如果偏移量为零,则输出“Z”。六个或更多字母会引发 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
不起作用。