首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串中的时间列表(7:08 AM,10:03 AM)与Android / Java中当前的本地时间进行比较

将字符串中的时间列表(7:08 AM,10:03 AM)与Android / Java中当前的本地时间进行比较
EN

Stack Overflow用户
提问于 2016-03-31 21:40:56
回答 3查看 69关注 0票数 0

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

代码语言:javascript
复制
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之后)。

请提出最好的比较方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-31 22:03:08

首先,您需要转换从文本文件中获取的时间。让我们从早上7点38分出发把它分成三部分-

代码语言:javascript
复制
 Hour = 7

 Minute = 38

 AM_PM value = AM

现在用你的值创建一个日历实例-

代码语言:javascript
复制
                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();

和时间-

代码语言:javascript
复制
long currentTimeInMillis = Calendar.getInstance().getTimeInMillis();

现在,您可以按照您想要的方式比较timecurrentTimeInMillis,并添加您的逻辑以完成任务。

票数 0
EN

Stack Overflow用户

发布于 2016-03-31 22:06:14

使用TreeSet。使用默认构造函数创建TreeSet将返回一个自然排序元素的集合。Date是一个类似的实现者,因此不需要额外的工作。

然后,您可以用当前时间调用TreeSet的更高方法,以获得比时间更大的第一个键。

因此,总的来说:

代码语言:javascript
复制
TreeSet<Date> dates = new TreeSet<Date>();
//add all dates..

Date next = dates.higher(new Date())

编辑我意识到您可能还在问如何抵消时间,因为如果没有年份/月/日,解析的日期将从0毫秒开始。

要获得今天日期的当前时间,您可以这样做:

代码语言:javascript
复制
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通常是解析日期的好的第一步。

第二次编辑--我认为可能与我建议的内容有些混淆,所以这里有一个完整的解决方案,提供不同的产品。

代码语言:javascript
复制
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文档

SimpleDateFormat文档

票数 1
EN

Stack Overflow用户

发布于 2016-03-31 22:10:16

您可以使用java.util.Date.compareTo方法:

示例:

代码语言:javascript
复制
     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,您可以在程序中使用此方法。

我希望ı能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36344351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档