我有一个文本文件的时间列表,我正在逐行阅读。例如,我的文本文件
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之后)。
请提出最好的比较方法。
发布于 2016-03-31 22:03:08
首先,您需要转换从文本文件中获取的时间。让我们从早上7点38分出发把它分成三部分-
Hour = 7
Minute = 38
AM_PM value = AM现在用你的值创建一个日历实例-
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();和时间-
long currentTimeInMillis = Calendar.getInstance().getTimeInMillis();现在,您可以按照您想要的方式比较time和currentTimeInMillis,并添加您的逻辑以完成任务。
发布于 2016-03-31 22:06:14
使用TreeSet。使用默认构造函数创建TreeSet将返回一个自然排序元素的集合。Date是一个类似的实现者,因此不需要额外的工作。
然后,您可以用当前时间调用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方法在不考虑日期的情况下进行时间比较。
SimpleDateFormat文档
发布于 2016-03-31 22:10:16
您可以使用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,对于其他的option.So,则返回-1,您可以在程序中使用此方法。
我希望ı能帮上忙。
https://stackoverflow.com/questions/36344351
复制相似问题