我试图了解如何为我的应用程序构建自定义 DateTimeFormatter
。我基本上需要处理像这样写的时间 "HHMMSS.FFFFFF" 。
我能够使用以下方法获得其中的 99%:
import static java.time.temporal.ChronoField.HOUR_OF_DAY;
import static java.time.temporal.ChronoField.MICRO_OF_SECOND;
import static java.time.temporal.ChronoField.MINUTE_OF_HOUR;
import static java.time.temporal.ChronoField.SECOND_OF_MINUTE;
public static final DateTimeFormatter MY_TIME;
static {
MY_TIME = new DateTimeFormatterBuilder()
.appendValue(HOUR_OF_DAY, 2)
.appendValue(MINUTE_OF_HOUR, 2)
.optionalStart()
.appendValue(SECOND_OF_MINUTE, 2)
.optionalStart()
.appendFraction(MICRO_OF_SECOND, 0, 6, true)
.toFormatter().withResolverStyle(ResolverStyle.STRICT);
}
我可以很好地处理输入:
String text = "101530";
LocalTime lt = LocalTime.parse(text, MY_TIME);
甚至
String text = "070907.0705";
LocalTime lt = LocalTime.parse(text, MY_TIME);
和
String text = "0000";
LocalTime lt = LocalTime.parse(text, MY_TIME);
但是由于某种原因,我无法理解用于处理闰秒的 API,因此以下对我来说总是失败:
String text = "235960";
LocalTime lt = LocalTime.parse(text, MY_TIME);
我应该如何构建我的
DateTimeFormatterBuilder
以便处理闰秒?更新:我真的很喜欢
ResolverStyle.STRICT
,因为它拒绝无效输入,例如:所以在这种情况下我不能使用
ResolverStyle.LENIENT
,我只是想要闰秒的额外特殊情况。 最佳答案
来自java.time.Instant JavaDoc的相关描述:
简而言之,您不应该期望 java.time
API 知道闰秒。