我无法解析从 API 返回的日期格式并且我从未见过(我相信是自定义格式)。日期示例:
/Date(1353447000000+0000)/
当我第一次遇到这种格式时,我很快就发现它是以毫秒为单位的时间,带有时区偏移。不过,我无法使用 SimpleDateFormat 提取此日期。这是我的第一次尝试:
String weirdDate = "/Date(1353447000000+0000)/";
SimpleDateFormat sdf = new SimpleDateFormat("'/Date('SSSSSSSSSSSSSZ')/'");
Date d1 = sdf.parse(weirdDate);
System.out.println(d1.toString());
System.out.println(d1.getTime());
System.out.println();
Date d2 = new Date(Long.parseLong("1353447000000"));
System.out.println(d2.toString());
System.out.println(d2.getTime());
并输出:
Tue Jan 06 22:51:41 EST 1970
532301760
Tue Nov 20 16:30:00 EST 2012
1353447000000
日期(和解析的毫秒数)甚至还没有接近,我无法弄清楚原因。经过一些故障排除后,我发现我尝试使用 SDF 的方式显然存在缺陷。例子:
String weirdDate = "1353447000000";
SimpleDateFormat sdf = new SimpleDateFormat("S");
Date d1 = sdf.parse(weirdDate);
System.out.println(d1.toString());
System.out.println(d1.getTime());
并输出:
Wed Jan 07 03:51:41 EST 1970
550301760
我不能说我曾经尝试过以这种方式使用 SDF 来解析以毫秒为单位的时间,因为我通常会使用Long.parseLong()
并将其直接传递给new Date(long)
(实际上我现在拥有的解决方案只是一个常规的表达式和解析长)。我正在寻找一种更简洁的解决方案,我可以轻松地以毫秒为单位提取时区时间,并快速解析为日期,而无需繁琐的手动处理。任何人有任何想法或可以发现我上面的逻辑中的错误?非常感谢您的帮助。