gpt4 book ai didi

java - 如何使用 Java DateTimeFormatter 舍入到最知名的 INSTANT_SECONDS 值?

转载 作者:行者123 更新时间:2023-12-02 01:08:26 24 4
gpt4 key购买 nike

我正在使用 Java DateTimeFormatter为了解析日期和日期时间。我用 DateTimeFormatterBuilder 构建它dtfb ,然后尝试从中获取纪元秒,如下所示:

dtfb.toFormatter().withZone(ZoneId.of("America/New_York"))
.parse(timeStr)
.getLong(ChronoField.INSTANT_SECONDS)

但是,这仅在 timeStr 时有效。足够具体以识别特定的一秒。例如,这有效:"1997.10.10 23:45:23" ,但这并不"1997.10.10" ,因为没有时分秒信息。我想知道Java中是否有一种方法可以系统地“向下舍入”并返回符合约束的第一个时间戳。例如,在这种失败的情况下,我希望答案是 "1997.10.10 00:00:00" 处的时间戳。 。基本上只是继续以越来越小的时间单位填充零,直到它足够具体给我一秒钟的时间。这可能吗?

最佳答案

我想这可能就是你想做的。我尝试过 ChronoField.SECOND_OF_DAY ,但这会导致 java.time.DateTimeException: Conflict found: HourOfDay 23 differs from HourOfDay 0 while resolving当使用带有时间戳的示例时。

请注意,您必须使用格式化字符串开始构建。如果您使用.parseDefaulting之前.appendPattern ,您会得到 java.time.format.DateTimeParseException .

import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.time.ZoneId;

class Testing {
public static void main(String[] args) {
DateTimeFormatterBuilder dtfb =
new DateTimeFormatterBuilder()
.appendPattern("yyyy.dd.MM[ HH:mm:ss]")
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0);

String timeStr = "1997.10.10";
// String timeStr = "1997.10.10 00:00:01";
// String timeStr = "1997.10.10 23:45:23";

Long instant =
dtfb.toFormatter().withZone(ZoneId.of("America/New_York"))
.parse(timeStr)
.getLong(ChronoField.INSTANT_SECONDS);

System.out.println(instant);
}
}

关于java - 如何使用 Java DateTimeFormatter 舍入到最知名的 INSTANT_SECONDS 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59723163/

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