我在一个文本文件中有一个时间列表,我正在逐行阅读。 例如,我的文本文件有
7:23 AM
7:38 AM
7:53 AM
8:08 AM
8:23 AM
8:38 AM
8:53 AM
9:08 AM
9:23 AM
9:38 AM
等等。
我能够获取时间,但现在我需要将每个项目与本地时间(android中的系统时间)进行比较,并在下一次建议。
因此,如果我当地的系统时间是上午8:00,我需要在下午8:08显示下一个可用时间
我的文本文件也有PM格式的时间(在12:00 PM之后)。
请建议比较的最佳方式。
答案 0 :(得分:2)
使用TreeSet。使用默认构造函数创建TreeSet将返回一个自然地对元素进行排序的集合。 Date是Comparable的实现者,因此不需要额外的工作。
然后,您可以使用当前时间调用TreeSet的更高方法,以获得严格大于您的时间的第一个密钥。
所以,完全是:
TreeSet<Date> dates = new TreeSet<Date>();
//add all dates..
Date next = dates.higher(new Date())
编辑我意识到你可能也会问如何抵消时间,因为没有年/月/日解析日期将从0毫秒开始。
要了解今天的当前时间,您可以这样做:
SimpleDateFormat format = new SimpleDateFormat("h:mm a");
Calendar date = Calendar.getInstance();
date.set(Calendar.HOUR_OF_DAY, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, (int)format.parse(dateFromFile).getTime());
date.getTime()
可能有更好的方法,但使用SimpleDateFormat通常是解析日期的第一步。
第二次编辑我认为可能与我所建议的内容存在一些混淆,因此这里提供的是不同产品的完整解决方案。
SimpleDateFormat format = new SimpleDateFormat("h:mm a");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Calendar date = Calendar.getInstance();
date.setTimeZone(TimeZone.getTimeZone(myTimeZone));
date.set(Calendar.HOUR_OF_DAY, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
TreeSet<Long> timesFromFile = new TreeSet<>();
TreeSet<Date> datesFromFile = new TreeSet<>();
String line;
//i'm using class BufferedReader since it reads lines at a time
while ((line = bufferedFileReader.readLine()) != null) {
date.set(Calendar.MILLISECOND, (int)format.parse(line).getTime());
Date dateFromFile = date.getTime();
long millsecondRepresentation = dateFromFile.getTime();
datesFromFile.add(dateFromFile);
timesFromFile.add(millsecondRepresentation);
}
Date now = new Date();
Long higherLong = timesFromFile.higher(now.getTime());
Date higherDate = datesFromFile.higher(now);
assertEquals(new Date(higherLong), higherDate);
assertTrue(now.before(higherDate));
assertTrue(now.getTime() < higherLong);
这有效地创建了今天的日期,以便将它们与当前时间进行比较,这将把今天的日期纳入其时间戳。我不知道任何标准的Java方法进行时间比较而不以某种方式考虑日期。
答案 1 :(得分:0)
首先,您需要转换从文本文件中提取的时间。 让我们以7:38 AM为例。 将它分成3个部分 -
Hour = 7
Minute = 38
AM_PM value = AM
现在使用您的值创建一个Calendar实例 -
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, hour);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.AM_PM, Calendar.AM); // Calendar.PM for PM
long time = cal.getTimeInMillis();
和Cjurrent时间 -
long currentTimeInMillis = Calendar.getInstance().getTimeInMillis();
现在,您可以按照自己的方式比较time
和currentTimeInMillis
,并添加逻辑以实现您的任务。
答案 2 :(得分:0)
您可以使用java.util.Date.compareTo方法:
示例:
Date date = new Date(98, 5, 21);
Date date2 = new Date(99, 1, 9);
// make 3 comparisons with them
int comparison = date.compareTo(date2);
此进度将返回三个值-1 0 1表示更大它将返回1表示相等0,-1表示其他选项。因此,您可以将此方法用于您的程序。
我希望能帮到你。