gpt4 book ai didi

java - 用闰秒解析 LocalTime

转载 作者:搜寻专家 更新时间:2023-11-01 02:36:48 26 4
gpt4 key购买 nike

我正在尝试了解如何构建自定义 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,因为它拒绝无效输入,例如:

  • “251213”或者,
  • “126100”

所以在这种情况下我不能使用 ResolverStyle.LENIENT,我只是想要闰秒的额外特殊情况。

最佳答案

如果不显示日历日期和时区,则显示闰秒的本地时钟时间没有多大意义。否则你不知道要解析的字符串是否真的有效(java.time-package 不会帮助你验证它)或者只是以一种宽松的方式(即解析“60 “下一秒)。

关于 java.time 的闰秒功能:

java.time 确实可以容忍任何与闰秒相结合的虚拟日期,尽管在大多数情况下这是错误的。 DateTimeFormatter 只接受 UTC 偏移量零,但不接受像“2012-07-01T08:59:60+0900”这样的表达式。

此外:java.time.Instant 无法存储闰秒信息,而是将其丢弃。你只能 query the parser对于可能的闰秒标志。然后由您决定如何处理这些信息。

结论:如果您想忽略闰秒信息但在输入中容忍它,则此方法适合您。

备选方案:

如果您真的对解析、验证和评估可能的闰秒感兴趣,那么我建议使用我的库 Time4J .但它确实需要一个有效的日历日期(仅在极少数日期插入闰秒)。

     ChronoFormatter<Moment> formatter = 
ChronoFormatter.ofMomentPattern(
"uuuu-MM-dd'T'HH:mm:ss XXX",
PatternType.CLDR,
Locale.ROOT,
ZonalOffset.UTC
)
Moment m = formatter.parse("2012-07-01T08:59:60+09:00");

// this conversion throws away the leap second
Instant i = m.toTemporalAccessor();

有关更多信息,另请参阅我关于 DZone 的文章.

关于java - 用闰秒解析 LocalTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48009870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com