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

使用java.time.DateTimeFormatter格式化java日期,包括时间偏移,java,datetime-format,garbage,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_FOR

我目前正在努力重构这段旧代码,以使用新的
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_即时格式化程序,如:

DateTimeFormatter.ISO_INSTANT.format(date.toInstant());
但这会产生与以前略有不同的输出

我的测试显示:

Expected: is "2013-10-22T05:23:48.397+0200"
 but: was "2013-10-22T03:23:48.397Z"
因此,我需要在格式字符串中包含时区偏移量,如所示

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

我需要怎么做? 我知道我可以使用单线程本地SimpleDataFormat实例,但我想使用新的java.time工具:-)

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