我想将自己的 DateTimeFormatter 设置为全局格式化程序。当我执行以下操作时:
ZonedDateTime.now();
I get:
2016-03-30T08:58:54.180-06:00[America/Chicago]
如果我这样做:
ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME)
I get:
Wed, 30 Mar 2016 9:00:06 -0600
我想要上面打印的内容,但是使用 am/pm,所以我制作了自定义格式化程序并打印出时间,如下所示:
DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss a Z");
ZonedDateTime.now().format(FORMATTER);
这给了我:
Wed, 30 Mar 2016 9:00:06 AM -0600
但我用这个.now()
方法无处不在用于记录目的,我不想在代码中的任何地方定义格式化程序。有没有办法将格式化程序配置为调用时使用的默认格式.now()
方法?我在想 spring bean 配置方法之类的......
您可以简单地在类中声明一个常量:
class UtilsOrWhatever {
public static final DateTimeFormater RFC_1123_DATE_TIME_AM_PM = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy hh:mm:ss a Z");
}
并简单地在您的代码中使用:
ZonedDateTime.now().format(RFC_1123_DATE_TIME_AM_PM); //needs a static import
或者,使用纯 Java EE 7,您可以创建DateTimeFormatter 生产者 https://docs.oracle.com/javaee/7/tutorial/cdi-basic012.htm#GJDID with @Produces
然后简单地@Inject
it.
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");
}
在你的代码中:
@Inject DateTimeFormatter rfc;
如果您有多个格式化程序,您也可以为其指定一个名称,如上面的链接所示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)