java SimpleDateFormat.parse UTC时间为亚洲/香港时间

时间:2019-07-12 10:25:49

标签: java json timezone wildfly simpledateformat

在Web上,日期为亚洲/香港格式(UTC + 8),但是当使用JSON格式传递到WildFly服务器时,在服务器调试模式下,日期字符串将变为UTC格式。 例如

web:2015年10月12日星期一00:00:00 GMT + 0800(香港标准时间)
WildFly服务器:2015-10-11T16:00:00.000Z

我想用java SimpleDateFormat将其解析回Asia / Hong_Kong格式,我尝试

    String dateUTC="2015-10-11T16:00:00.000Z";

    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println("sdf1.parse(dateUTC)="+sdf1.parse(dateUTC));

    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
    sdf2.setTimeZone(TimeZone.getTimeZone("UTC"));
    System.out.println("sdf2.parse(dateUTC)="+sdf2.parse(dateUTC));
    SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd");
    sdf3.setTimeZone(TimeZone.getTimeZone("Asia/Hong_Kong"));
    System.out.println("sdf3.parse(dateUTC)="+sdf3.parse(dateUTC));

我希望输出为“ 2015-10-12”,但失败,输出为

  

sdf1.parse(dateUTC)= 2015年10月11日星期日00:00:00 HKT
  sdf2.parse(dateUTC)= HKT 2015年10月11日08:00:00
  sdf3.parse(dateUTC)= 2015年10月11日00:00:00 HKT

1)那么如何使输出成为“ 2015-10-12”? (因为香港是UTC + 8)?

2)有什么方法可以使服务器接收亚洲/香港格式的Web日期时间,但不能采用UTC日期时间格式?我尝试通过设置VM参数来设置WildFly java_opts

-Duser.timezone=Asia/Hong_Kong

但没有用,服务器仍以UTC格式接收日期时间。

1 个答案:

答案 0 :(得分:2)

使用过时的DateSimpleDateFormat类停止。使用java.time包。

并意识到,如果您有一个完整的瞬间(精确到毫秒)并以标准ISO格式指定时区(Z表示UTC),那么在解析时,您将不会忽略所有时区和时区。解析整个事情:

    String dateUTC = "2015-10-11T16:00:00.000Z";
    Instant instant = Instant.parse(dateUTC);
    ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Asia/Hong_Kong"));
    System.out.println(zonedDateTime.toLocalDate());
    // prints 2015-10-12

使用旧的,过时的DateSimpleDateDateFormat类,您不再应该使用的等效类将是

    String dateUTC = "2015-10-11T16:00:00.000Z";

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
    Date parsed = sdf.parse(dateUTC);
    SimpleDateFormat sdfHongKong = new SimpleDateFormat("yyyy-MM-dd");
    sdfHongKong.setTimeZone(TimeZone.getTimeZone("Asia/Hong_Kong"));
    System.out.println(sdfHongKong.format(parsed));
    // prints 2015-10-12