Java 列表中最近的时间值
是否有任何方法可以显示列表中的元素(或可能执行类似功能的任何其他元素)与当前时间进行比较。 所以,我制作了一个包含时间的arraylist,它没有任何重复模式,使用方法将时间增加10分钟(例如)是不可能的 我有以下建议: 具有当前时间的日期函数:Java 列表中最近的时间值,java,date,arraylist,time,Java,Date,Arraylist,Time,是否有任何方法可以显示列表中的元素(或可能执行类似功能的任何其他元素)与当前时间进行比较。 所以,我制作了一个包含时间的arraylist,它没有任何重复模式,使用方法将时间增加10分钟(例如)是不可能的 我有以下建议: 具有当前时间的日期函数: Date date = new Date(); DateFormat dateformat = new SimpleDateFormat("HH:mm:ss"); 有我需要的时间的ArrayList: ArrayList<String>
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");
ArrayList time=new ArrayList();
加上(“5:40”);
加上(“6:40”);
时间。加上(“8:30”);
加上(“9:45”);
加上(“10:35”);
时间。加上(“11:10”);
加上(“11:55”);
加上(“12:20”);
时间。加上(“13:30”);
时间。加上(“14:55”);
时间。加上(“16:00”);
时间。加上(“16:30”);
时间。加上(“17:30”);
时间。加上(“19:00”);
加上(“20:10”);
加上(“21:10”);
现在我很好奇,也因为我是新手,有没有下一步的方法:
1)考虑到会有很多数组有时间,有没有一种方法(可能有一些代码示例)可以编写一个方法,该方法将有一个参数,以便用户可以选择要显示的“时间”
2)是否需要使用循环一次(在本例中为“时间”数组),它到达末尾,或者可以写入循环,以便根据当前时间自动转到开始
3)代码优化:这是否可以以更实际的方式编写
我对这方面还不太熟悉,因此非常感谢您提供的任何帮助(包括指导和代码示例),以便我可以在本项目中使用它,并将其作为未来项目的学习材料。最好使用实际的日期对象,并对其进行比较。但是,如果需要使用字符串进行比较,则可以编写一个比较函数,该函数将两个日期进行比较,并在几分钟内输出它们之间的差值
int compare(String d1, String d2) {
//split the strings based on the ":"
string d1Split[] = d1.split(":");
string d2Split[] = d2.split(":");
//convert each one to minutes - note this assumes the string will always be formatted like "hours:minutes:anything else is irrelevant"
d1Mins = d1Split[0] * 60 + d1Split[1];
d2Mins = d2Split[0] * 60 + d2Split[1];
//return the absolute value of the difference between the times in minutes - note this assumes the times will be part of the same day
return Math.abs(d1Mins - d2Mins);
}
一旦有了比较函数,您所需要做的就是遍历数组,将每个元素与当前日期进行比较,并存储最近的一个
int leastDifference = 999999;
String now = dateformat.format(date);
String closest = "";
for (String toCompare : time) {
int comparison = compare(toCompare, now);
if (comparison < leastDifference) {
leastDifference = comparison;
closest = toCompare;
}
}
int-leastDifference=999999;
String now=dateformat.format(日期);
字符串最接近=”;
for(字符串toCompare:time){
int compare=比较(现在是compare);
如果(比较<最小差异){
最小差异=比较;
最近的=比较;
}
}
最接近的将包含您要查找的字符串。最好使用实际的日期对象并对其进行比较。但是,如果需要使用字符串进行比较,则可以编写一个比较函数,该函数将两个日期进行比较,并在几分钟内输出它们之间的差值
int compare(String d1, String d2) {
//split the strings based on the ":"
string d1Split[] = d1.split(":");
string d2Split[] = d2.split(":");
//convert each one to minutes - note this assumes the string will always be formatted like "hours:minutes:anything else is irrelevant"
d1Mins = d1Split[0] * 60 + d1Split[1];
d2Mins = d2Split[0] * 60 + d2Split[1];
//return the absolute value of the difference between the times in minutes - note this assumes the times will be part of the same day
return Math.abs(d1Mins - d2Mins);
}
一旦有了比较函数,您所需要做的就是遍历数组,将每个元素与当前日期进行比较,并存储最近的一个
int leastDifference = 999999;
String now = dateformat.format(date);
String closest = "";
for (String toCompare : time) {
int comparison = compare(toCompare, now);
if (comparison < leastDifference) {
leastDifference = comparison;
closest = toCompare;
}
}
int-leastDifference=999999;
String now=dateformat.format(日期);
字符串最接近=”;
for(字符串toCompare:time){
int comparison=比较(toCompare,现在);
如果(比较<最小差异){
最小差异=比较;
最近的=比较;
}
}
最接近的将包含您要查找的字符串。java.time
使用类而不是字符串
来表示您的值。LocalTime
对象表示一天中没有日期和时区的时间
创建您的应用程序
如果输入字符串缺少填充零,则定义并使用
分类
对列表进行排序
。静态方法是一种方法
Collections.sort( list );
当前时间
获取当前时间。为此,需要一个时区(),因为世界上任何时刻的挂钟时间都因时区而异。不要使用常见的3-4个字母的缩写,如EST
或IST
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalTime now = LocalTime.now( zoneId );
循环列表
循环列表
将列表中的每个元素与立即
进行比较,使用定义“最近”的任何规则。该类以总秒数加上以纳秒为单位的分数秒来跟踪时间跨度
注意,Duration
类有各种方法来帮助比较。该方法给出了一种新的方法(将负片转换为正片)。该方法告诉您一个持续时间是否大于、小于或等于另一个持续时间
…
for ( LocalTime localTime : list ) {
Duration duration = Duration.between( now , localTime );
…
}
NavigableSet
如果您不介意丢失任何可能的重复时间值,请使用a及其方法,如所示。java.time
使用类而不是字符串
来表示您的值。LocalTime
对象表示一天中没有日期和时区的时间
创建您的应用程序
如果输入字符串缺少填充零,则定义并使用
分类
对列表进行排序
。静态方法是一种方法
Collections.sort( list );
当前时间
获取当前时间。为此,需要一个时区(),因为世界上任何时刻的挂钟时间都因时区而异。不要使用常见的3-4个字母的缩写,如EST
或IST
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalTime now = LocalTime.now( zoneId );
循环列表
循环列表
将列表中的每个元素与立即
进行比较,使用定义“最近”的任何规则。该类以总秒数加上以纳秒为单位的分数秒来跟踪时间跨度
注意,Duration
类有各种方法来帮助比较。该方法给出了一种新的方法(将负片转换为正片)。该方法告诉您一个持续时间是否大于、小于或等于另一个持续时间
…
for ( LocalTime localTime : list ) {
Duration duration = Duration.between( now , localTime );
…
}
NavigableSet
如果您不介意丢失任何可能的重复时间值,请使用及其方法,如中所示
时间
列表进行排序字符串搜索(字符串当前小时数、列表时间、整数开始、整数结束){
如果(开始==结束和时间.获取(开始)>当前小时数)
返回时间。获取(开始);
其他的
返回货币小时数;
int mid=(开始+结束)>>1;
//一次丢弃一半