使用java.time.DateTimeFormatter格式化java Date,包括时间偏移量

时间:2015-11-22 13:50:13

标签: java datetime-format garbage

我目前正在努力重构这段旧代码以使用新的java.time.format.DateTimeFormatter,因为它在我们的主日志记录组件中使用,这会产生不必要的垃圾。

private String getFormattedDate(final Date date) {
    // a new instance is created foreach log message 
    SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
    return dateFormat.format(date);
}

我已经尝试了新的ISO_INSTANT格式化程序,如:

DateTimeFormatter.ISO_INSTANT.format(date.toInstant());

但是这会产生(稍微)不同的输出。

我的测试显示:

Expected: is "2013-10-22T05:23:48.397+0200"
 but: was "2013-10-22T03:23:48.397Z"

所以我需要将时区偏移量包含在格式字符串中,如预期的那样。

我知道DateTimeFormatterBuilder,但我没有设法以获得所需格式输出的方式构建它。

我怎么需要这样做? 我知道我总是可以回到使用单个线程本地SimpleDateFormat实例,但我想使用新的java.time东西: - )

1 个答案:

答案 0 :(得分:2)

Date date = new Date();

System.out.println(DateTimeFormatter.ISO_INSTANT.format(date.toInstant()));
// output: 2015-11-22T14:46:08.776Z

System.out.println(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(
       date.toInstant().atZone(ZoneId.systemDefault())));
// output: 2015-11-22T15:46:08.776+01:00

System.out.println(DateTimeFormatter.ISO_OFFSET_DATE_TIME
                                    .withZone(ZoneId.systemDefault())
                                    .format(date.toInstant()));
// output: 2015-11-22T15:46:08.776+01:00