gpt4 book ai didi

java - 列表中最近的时间值

转载 作者:行者123 更新时间:2023-12-01 16:52:49 25 4
gpt4 key购买 nike

是否有任何方法可以显示与当前时间相比的列表元素(或任何其他可能执行类似功能的元素)。因此,我制作了一个包含时间的数组列表,它没有任何重复模式,使用方法将其增加 10 分钟(例如)不会。

我有以下内容:

具有当前时间的日期函数:

Date date = new Date(); 
DateFormat dateformat = new SimpleDateFormat("HH:mm:ss");

ArrayList 有我需要的时间:

ArrayList<String> time = new ArrayList<String>();

time.add("5:40");
time.add("6:40");
time.add("8:30");
time.add("9:45");
time.add("10:35");
time.add("11:10");
time.add("11:55");
time.add("12:20");
time.add("13:30");
time.add("14:55");
time.add("16:00");
time.add("16:30");
time.add("17:30");
time.add("19:00");
time.add("20:10");
time.add("21:10");

现在我很好奇,也因为我对此不熟悉,接下来有什么办法吗:

1) 考虑到会有很多数组有时间,有没有办法(也许有一些代码示例)编写一个带有参数的方法,以便用户可以选择哪个他们希望显示“时间”?

2) 是否需要使用循环一次(在本例中为“时间”数组)到达末尾,或者可以编写它以便根据当前时间自动转到开头。

3)代码优化:可以用更实用的方式编写吗?

我对此还很陌生,因此非常感谢任何帮助(包括指导和代码示例),以便我可以在这个项目中使用它并作为 future 项目的学习 Material 。

最佳答案

java.time

使用LocalTime class 而不是 String 来表示您的值。 LocalTime 对象用于表示没有日期和时区的时间。

创建您的List .

List<LocalTime> list = new ArrayList<>();

解析

通过解析输入字符串来填充列表。如果您的输入字符串符合ISO 8601标准包括在一位数小时上填充零,那么您无需定义任何格式模式,因为 LocalTime 可以直接解析此类值。

list.add( LocalTime.parse( "09:45" ) );
list.add( LocalTime.parse( "10:35" ) );
list.add( LocalTime.parse( "11:10" ) );

如果您的输入字符串缺少填充零,则定义并使用 DateTimeFormatter .

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "h:m" );

LocalTime localTime = LocalTime.parse( input , formatter );

排序

列表进行排序Collections.sort静态方法是一种方法。

Collections.sort( list );

当前时间

获取当前时间。为此,需要一个时区 ( ZoneId ),作为世界各地不同时区的任意时刻的挂钟时间。使用proper time zone name ,切勿使用常见的 3-4 个字母缩写,例如 ESTIST

ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalTime now = LocalTime.now( zoneId );

循环列表

循环使用List将列表中的每个元素与now进行比较,使用您想到的定义“最近”的任何规则。 Duration类以总秒数加上以纳秒为单位的小数秒来跟踪时间跨度。

请注意,Duration 类具有多种方法来协助比较。 abs方法给出 absolute value (将负数转化为正数)。 compareTo方法告诉您一个持续时间是否大于、小于或等于另一个持续时间。


for ( LocalTime localTime : list ) {
Duration duration = Duration.between( now , localTime );

}

NavigableSet

如果您不介意丢失任何可能的重复时间值,请使用 NavigableSet及其 ceiling方法如the correct answer by Assyrians所示.

关于java - 列表中最近的时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36520353/

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