java列表中最近的日期时间值
是否有任何方法可以显示列表中的元素(或可能执行类似功能的任何其他元素)与当前时间进行比较。 所以,我制作了一个包含时间的arraylist,它没有任何重复模式,使用方法将时间增加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)代码优化:这可以用更实用的方式编写吗
我对这方面相当陌生,所以非常感谢任何帮助(包括指导和代码示例),以便我可以在本项目中使用它,并将其作为未来项目的学习材料
# 1 楼答案
最好使用实际的日期对象,并对它们进行比较。但是,如果需要使用字符串进行比较,则可以编写一个比较函数,该函数将两个日期进行比较,并在几分钟内输出它们之间的差值
一旦有了比较函数,您所需要做的就是遍历数组,将每个元素与当前日期进行比较,并存储最近的一个
最近的将包含您正在查找的字符串
# 2 楼答案
像@BasilBourque一样,我建议将时间存储为LocalTimes,但我也建议使用^{} 例如^{} 而不是
List
(我假设列表中的时间都是唯一的)想法是} method that does exactly what you need :
TreeSet
有a ^{然后你可以写:
# 3 楼答案
爪哇。时间
使用^{} 类而不是
String
来表示您的值。LocalTime
对象表示一天中没有日期和时区的时间创建你的^{}
解析
通过解析输入字符串来填充
List
。如果您的输入字符串符合ISO 8601标准,包括一位数小时的填充零,那么您不需要定义任何格式模式,因为LocalTime
可以直接解析这些值如果输入字符串缺少填充零,则定义并使用^{}
分类
对
List
进行排序。{a5}静态方法是一种方法当前时间
获取当前时间。为此,需要一个时区(^{} ),因为世界各地的挂钟时间因时区而异。使用proper time zone name,不要使用常见的3-4个字母的缩写,如
EST
或IST
循环列表
循环
List
将列表中的每个元素与now
进行比较,使用定义“最近”的任何规则。{a8}类跟踪的时间跨度为总秒数加上以纳秒为单位的分数秒注意} 方法告诉您一个持续时间是否大于、小于或等于另一个持续时间
Duration
类有各种方法来帮助比较。{a9}方法给出了一个{a10}(将负数转换为正数)。^{NavigableSet
如果您不介意丢失任何可能的重复时间值,请使用NavigableSet及其^{} 方法,如the correct answer by Assyrians所示
# 4 楼答案
time
列表进行排序String search(String currHrs, List time, int start, int end) { if (start == end && time.get(start) > currHrs) return time.get(start); else return currHrs; int mid = (start + end) >> 1; // discard one half at a time. return (time.get(mid) > currHrs) ? search(currHrs, time, start, mid): search(currHrs, time, mid + 1, end); }