将String(上午7:08,上午10:03)中的时间列表与Android / Java

时间:2016-03-31 21:40:57

标签: java android

我在一个文本文件中有一个时间列表,我正在逐行阅读。 例如,我的文本文件有

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之后)。

请建议比较的最佳方式。

3 个答案:

答案 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方法进行时间比较而不以某种方式考虑日期。

TreeSet documentation

SimpleDateFormat documentation

答案 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();

现在,您可以按照自己的方式比较timecurrentTimeInMillis,并添加逻辑以实现您的任务。

答案 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表示其他选项。因此,您可以将此方法用于您的程序。

我希望能帮到你。