小编msz*_*ski的帖子

Javascript Date.toString输出的DateTimeFormatter

试图new Date().toString()用Java 支持Javascript的输出格式,DateTimeFormatter但似乎无法使其工作.

Js输出具有以下特性:

  • Wed Apr 04 2018 09:56:16 GMT-0500(SA太平洋标准时间)
  • Wed Apr 04 2018 16:12:41 GMT + 0200(CEST)

我目前的格式化程序:

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为:

  • GMT-0500(SA太平洋标准时间)
  • GMT + 0200(CEST)

我知道问题是:(冒号),因为如果我打印当前日期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

非常感谢,谢谢 …

javascript java java-8 java-time

1
推荐指数
1
解决办法
604
查看次数

标签 统计

java ×1

java-8 ×1

java-time ×1

javascript ×1