Skip to content
This repository has been archived by the owner on Oct 23, 2024. It is now read-only.

反序列化带时区的时间字符串失败 #2754

Closed
cqdavidwei opened this issue Sep 18, 2019 · 12 comments · Fixed by #2778
Closed

反序列化带时区的时间字符串失败 #2754

cqdavidwei opened this issue Sep 18, 2019 · 12 comments · Fixed by #2778
Milestone

Comments

@cqdavidwei
Copy link

你好,我在Java中使用1.2.60的fastjson反序列化如下json时会出现反序列化失败:
待反序列化的Json内容:
"{"p1":"2019-09-18T20:35:00+12:45"}"

用于反序列化的类:
public class C{
public Calendar p1;
}

我看了下fastjson的底层源码,发现是JSONScanner类的第479行代码(scanISO8601DateIfMatch方法中)有个判断if (t3 != '0' && t3 != '3'){return false;}导致的,当时间带时区且时区不是0分或者30分时,就认为不是ISO8601的格式,但实际上的确有些地方的时区是45分,比如新西兰的时区是+12:45,具体可以见下面的wiki:
https://en.wikipedia.org/wiki/List_of_UTC_time_offsets
同时,我看了下ISO8601的wiki,规范中并未限制时区的分钟部分只能是0或者30分,见下wiki:
https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC

所以麻烦看一看这个问题是否是bug或者是有什么其他方法可以绕过这个问题吧?

@cqdavidwei
Copy link
Author

hi 有人能帮忙看下这个问题吗?

@XYNIK
Copy link

XYNIK commented Sep 24, 2019 via email

@XYNIK
Copy link

XYNIK commented Sep 24, 2019 via email

@XYNIK
Copy link

XYNIK commented Sep 24, 2019 via email

@cqdavidwei
Copy link
Author

@Omega-Ariston 你好,我看了下你修复后的代码,限制得比较死,只是单独支持了+12:45时区的反序列化(if(t0 == '1' && t1 == '2' && t3 == '4' && t4 == '5') {}),但实际上,特殊的时区还有+05:45, +08:45,所以避免后面再出现类似问题,麻烦也一并解决下吧?谢谢。

wenshao added a commit that referenced this issue Sep 26, 2019
fix issue #2754(反序列化带时区的时间字符串失败)
@Omega-Ariston
Copy link
Collaborator

@Omega-Ariston 你好,我看了下你修复后的代码,限制得比较死,只是单独支持了+12:45时区的反序列化(if(t0 == '1' && t1 == '2' && t3 == '4' && t4 == '5') {}),但实际上,特殊的时区还有+05:45, +08:45,所以避免后面再出现类似问题,麻烦也一并解决下吧?谢谢。

嗯嗯,之前看wiki以为只有新西兰时区情况特殊,后来仔细查了下发现还有以下几个:

  • Asia/Kathmandu +05:45
  • Asia/Katmandu +08:45
  • Australia/Eucla +08:45
  • NZ-CHAT +12:45
  • Pacific/Chatham +12:45

多谢提醒,一会完善一下 :)

@cqdavidwei
Copy link
Author

@Omega-Ariston 你好,我看了下你修复后的代码,限制得比较死,只是单独支持了+12:45时区的反序列化(if(t0 == '1' && t1 == '2' && t3 == '4' && t4 == '5') {}),但实际上,特殊的时区还有+05:45, +08:45,所以避免后面再出现类似问题,麻烦也一并解决下吧?谢谢。

嗯嗯,之前看wiki以为只有新西兰时区情况特殊,后来仔细查了下发现还有以下几个:

  • Asia/Kathmandu +05:45
  • Asia/Katmandu +08:45
  • Australia/Eucla +08:45
  • NZ-CHAT +12:45
  • Pacific/Chatham +12:45

多谢提醒,一会完善一下 :)

客气了,另外,我想问下,这个大概会在哪个版本解决呢?

Omega-Ariston added a commit to Omega-Ariston/fastjson that referenced this issue Sep 26, 2019
@Omega-Ariston
Copy link
Collaborator

@Omega-Ariston 你好,我看了下你修复后的代码,限制得比较死,只是单独支持了+12:45时区的反序列化(if(t0 == '1' && t1 == '2' && t3 == '4' && t4 == '5') {}),但实际上,特殊的时区还有+05:45, +08:45,所以避免后面再出现类似问题,麻烦也一并解决下吧?谢谢。

嗯嗯,之前看wiki以为只有新西兰时区情况特殊,后来仔细查了下发现还有以下几个:

  • Asia/Kathmandu +05:45
  • Asia/Katmandu +08:45
  • Australia/Eucla +08:45
  • NZ-CHAT +12:45
  • Pacific/Chatham +12:45

多谢提醒,一会完善一下 :)

客气了,另外,我想问下,这个大概会在哪个版本解决呢?

据我所知,正常情况下master分支里的代码是会和下一个版本一起打包发布

@cqdavidwei
Copy link
Author

@Omega-Ariston 你好,我看了下你修复后的代码,限制得比较死,只是单独支持了+12:45时区的反序列化(if(t0 == '1' && t1 == '2' && t3 == '4' && t4 == '5') {}),但实际上,特殊的时区还有+05:45, +08:45,所以避免后面再出现类似问题,麻烦也一并解决下吧?谢谢。

嗯嗯,之前看wiki以为只有新西兰时区情况特殊,后来仔细查了下发现还有以下几个:

  • Asia/Kathmandu +05:45
  • Asia/Katmandu +08:45
  • Australia/Eucla +08:45
  • NZ-CHAT +12:45
  • Pacific/Chatham +12:45

多谢提醒,一会完善一下 :)

客气了,另外,我想问下,这个大概会在哪个版本解决呢?

据我所知,正常情况下master分支里的代码是会和下一个版本一起打包发布

好的,感谢支持。:)

wenshao added a commit that referenced this issue Sep 26, 2019
@wenshao wenshao added this to the 1.2.62 milestone Oct 3, 2019
@cqdavidwei
Copy link
Author

cqdavidwei commented Oct 22, 2019

@Omega-Ariston hi, 我又发现两个时区为45分的特殊情况,分别如下,可能需要麻烦你处理下了。
+09:45
+13:45

除了上面的+09:45和+13:45,还发现一些特殊的时区,如:-00:44,-00:25:21,+00:20,+01:24,+04:51,+05:40,+07:20等等。
完整的时区可以见下面这个wiki页面中最下方的表格:
https://en.wikipedia.org/wiki/List_of_UTC_time_offsets

@Omega-Ariston
Copy link
Collaborator

@Omega-Ariston hi, 我又发现两个时区为45分的特殊情况,分别如下,可能需要麻烦你处理下了。
+09:45
+13:45

除了上面的+09:45和+13:45,还发现一些特殊的时区,如:-00:44,-00:25:21,+00:20,+01:24,+04:51,+05:40,+07:20等等。
完整的时区可以见下面这个wiki页面中最下方的表格:
https://en.wikipedia.org/wiki/List_of_UTC_time_offsets

我核实下

@cqdavidwei
Copy link
Author

@Omega-Ariston hi 麻烦问下,这个核实有结果了吗?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants