Java 8设置全局时间格式化程序

Ric*_*ard 8 java spring datetime javabeans java-8

我想将自己的DateTimeFormatter设置为全局格式化程序.当我执行以下操作时:

ZonedDateTime.now();
Run Code Online (Sandbox Code Playgroud)

我明白了:

2016-03-30T08:58:54.180-06:00[America/Chicago]
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME)
Run Code Online (Sandbox Code Playgroud)

我明白了:

Wed, 30 Mar 2016 9:00:06 -0600
Run Code Online (Sandbox Code Playgroud)

我想要上面打印的内容但是上午/下午所以我制作了自定义格式化程序并打印出时间如下:

DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss a Z");

ZonedDateTime.now().format(FORMATTER);
Run Code Online (Sandbox Code Playgroud)

哪个给了我:

Wed, 30 Mar 2016 9:00:06 AM -0600
Run Code Online (Sandbox Code Playgroud)

但我.now()在任何地方都使用这种方法进行日志记录,我不想在代码中的任何地方定义格式化程序.有没有办法将格式化程序配置为调用.now()方法时使用的默认格式?我在想春天的配置方法或什么.....

ass*_*ias 5

你可以简单地在一个类中声明一个常量:

class UtilsOrWhatever {
  public static final DateTimeFormater RFC_1123_DATE_TIME_AM_PM = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy hh:mm:ss a Z");
}
Run Code Online (Sandbox Code Playgroud)

并简单地在您的代码中使用:

ZonedDateTime.now().format(RFC_1123_DATE_TIME_AM_PM); //needs a static import
Run Code Online (Sandbox Code Playgroud)

或者,使用纯Java EE 7,您可以使用然后简单地创建DateTimeFormatter Producer.@Produces@Inject

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;

@ApplicationScoped
public class RfcFormatterProducer {
  @Produces
  private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy hh:mm:ss a Z");
}
Run Code Online (Sandbox Code Playgroud)

在你的代码中:

@Inject DateTimeFormatter rfc;
Run Code Online (Sandbox Code Playgroud)

如果您有多个格式化程序,也可以在上面的链接中给它命名.