试图new Date().toString()用Java 支持Javascript的输出格式,DateTimeFormatter但似乎无法使其工作.
Js输出具有以下特性:
我目前的格式化程序:
int defaultOffset = ZonedDateTime.now().getOffset().getTotalSeconds();
DateTimeFormatter dtfJs = new DateTimeFormatterBuilder()
.appendPattern("EE MMM dd yyyy HH:mm:ss [OOOO (zzzz)]")
.parseDefaulting(ChronoField.OFFSET_SECONDS,defaultOffset
.toFormatter();
Run Code Online (Sandbox Code Playgroud)
如果我.parse()从js那些日期字符串,我得到以下错误:
[date]无法在索引25处解析
上述两个日期的指数25为:
我知道问题是:(冒号),因为如果我打印当前日期dtfJs,我得到:
Wed Apr 04 2018 10:25:10 GMT-05:00(哥伦比亚时间)
因此GMT-05:00,GMT-0500在收到的字符串中执行部分,但我找不到与此匹配的保留模式字母.
文档说:
偏移O:根据模式字母的数量格式化本地化偏移.一个字母输出本地化偏移的缩写形式,即局部偏移文本,例如'GMT',小时不带前导零,可选2位数分钟,第二个非零,和冒号,例如'GMT + 8 ".四个字母输出完整形式,这是本地化的偏移文本,例如'GMT,具有2位小时和分钟字段,可选的第二字段(如果非零)和冒号,例如'GMT + 08:00'.任何其他字母数量都会抛出IllegalArgumentException.
偏移Z:根据图案字母的数量格式化偏移.一个,两个或三个字母输出
小时和分钟,没有冒号,例如'+0130'.当偏移量为零时,输出将为"+0000".四个字母输出完整形式的局部偏移,相当于Offset-O的四个字母.如果偏移为零,则输出将是相应的本地化偏移文本.五个字母输出小时,分钟,可选第二个,如果非零,则使用冒号.如果偏移量为零,则输出"Z".六个或更多字母抛出IllegalArgumentException.
这意味着四个字母将始终以冒号":"输出,从而抛出 DateTimeParseException
非常感谢,谢谢 …