首页 > 解决方案 > Java 8 如何在使用 DateTimeFormatter#format 时排除可选部分

问题描述

我正在使用DateTimeFormatter带有可选部分的模式的 Java 8,并且我希望在格式化为时排除该可选部分String

我正在使用的模式:yyyyMMddHHmmss[.SSS]Z

我如何使用我的DateTimeFormatter

DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMddHHmmss[.SSS]Z");
String formattedDate = df.format(zonedDateTime);

我期望结果是:20180606052500+0100

代替:20180606052500.000+0100

一个解决方案是使用两个DateTimeFormatter,但我不希望这样,因为我希望我DateTimeFormatter在一个地方静态定义,以便它可以用于解析和格式化。

标签: javajava-8date-format

解决方案


一个简单的解决方案是重用模式的公共部分来构建 2 种不同的格式:

private static final String META_FORMAT = "yyyyMMddHHmmss%sZ";
private static final DateTimeFormatter FOR_PARSING = DateTimeFormatter.ofPattern(String.format(META_FORMAT, "[.SSS]"));
private static final DateTimeFormatter FOR_FORMATTING = DateTimeFormatter.ofPattern(String.format(META_FORMAT, ""));

这样你就没有重复的模式。


推荐阅读