gpt4 book ai didi

java - (简单)允许 24 :00:00 and 00:00:00 as inputs 的日期格式

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:48:44 24 4
gpt4 key购买 nike

我一直在寻找这个,到目前为止没有成功。你知道是否有一个“DateFormat”ish 类,它允许我使用“00:00:00”和“24:00:00”作为输入参数(它们都是午夜)但是当调用“getHour()”时"结果我会得到 0 或 24?

使用“kk”只会让我有 <1:24> 范围,同时我正在寻找 <0:24> 范围格式

最佳答案

24:00 未在 LocalTime 中表示,因为它严格来说是第二天的一部分。考虑了 24:00 可以表示为 LocalTime 的一部分的模型,但结论是它在很多用例中会非常困惑,并且创建比它解决的错误更多。


但是 java.time 支持 24:00。完全可以使用标准格式化技术对其进行解析,但是有必要使用 SMART 或 LENIENT 模式,请参阅 ResolverStyle .默认模式是 SMART,但是 DateTimeFormatter 上的格式化常量(如 DateTimeFormatter.ISO_LOCAL_DATE_TIME)处于 STRICT 模式。因此,ofPattern() 默认为 SMART 模式:

static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm");

LocalDateTime ldt = LocalDateTime.parse("2012-12-03T24:00", FORMATTER);
System.out.println(ldt); // 2012-12-04T00:00

请注意,这也适用于 OffsetDateTimeZonedDateTimeInstant 的标准解析器支持 24:00 而无需特殊格式化程序:

Instant instant = Instant.parse("2015-01-01T24:00:00Z");
System.out.println(instant); // 2015-01-02T00:00:00Z

任何格式化程序都可以使用 withResolverStyle() 转换为 SMART 或 LENIENT 模式如下:

DateTimeFormatter f = ...  // obtain a formatter somehow
DateTimeFormatter smartMode = f.withResolverStyle(ResolverStyle.SMART);

// for example
f = DateTimeFormatter.ISO_LOCAL_DATE_TIME.withResolverStyle(ResolverStyle.SMART);

支持的第二个元素是parseExcessDays() .这样就可以在只解析时间的时候得到多余的天数:

static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm");

TemporalAccessor parsed = TIME_FORMATTER.parse("24:00");
LocalTime lt = LocalTime.from(parsed);
Period excessDays = parsed.query(DateTimeFormatter.parsedExcessDays());
System.out.println(lt + " + " + excessDays); // 00:00 + P1D

最后,给高级用户的注意事项。理论上应该可以编写您自己的 Temporal 实现,它是 LocalTime 的副本,但支持 24:00 作为有效时间值(value)。这样的类,比如说 LocalTimeWithEndOfDay,然后可以毫无问题地与格式化程序/解析器一起操作(并且可能对 ThreeTen-Extra 做出很好的补充。

关于java - (简单)允许 24 :00:00 and 00:00:00 as inputs 的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31106357/

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