yyyy-MM-dd'T'HH:mm:ss'Z'和时间戳的转换?

时间戳1670037101000
如果我用yyyy-MM-dd'T'HH:mm:ss'Z'格式转换, 如果时区是UTC,那么得到结果2022-12-03T03:11:41Z, 如果时区是Asia/Shanghai,得到的时间是2022-12-03T03:11:41Z
转换代码如下:

     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
//        format.setTimeZone(TimeZone.getTimeZone(ZoneId.of("Asia/Shanghai")));
        format.setTimeZone(TimeZone.getTimeZone(ZoneId.of("UTC")));
        System.out.println(format.format(new Date(1670037101000L)));

1.这么转是对的吗?

阅读 1.9k
2 个回答

'Z' 其实是 0时区,也就是UTC,如果用Asia/Shanghai就不应该用Z

把Z的单引号去掉,再试试。。
一般来说需要输出带时区的日期字符串,类似2006-10-07T12:06:56.568+01:00
pattern 一般可以写为:yyyy-MM-dd'T'HH:mm:ss.SSSZZZ
类似你的pattern,Z是作为字符串输出了
另外相同的时间戳,上海时间应该比utc +8,你那个结果应该也不对,但是和你的pattern没什么关系,看一下timezone的设置,ZoneId.SHORT_IDS.get("CTT")

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题