2017-07-26 8 views
1

我有一个方法,它采用两个时间字符串的参数例如:t1 - 09:00和t2 - 15:00和一个Date参数。从给定日期与两个给定时间字符串使用Java比较时间

我想达到一个解决方案,从给定的时间到日期是在或在通过的时间框架内。

在此先感谢

public class CheckTime { 
    private boolean isOpen; 

    public boolean isValid(String time1, String time2, Date date) { 
     ----Logic goes here------ 
     return isOpen; 
    } 

    public static void main(String[] args) { 
     new CheckTime().isValid("09:00","15:00", 
          new Date(System.currentTimeMillis())); 
    } 
} 
+1

转换的时间值'LocalTime'并使用这些用'Date'值进行比较(我想转换成一个'LocalDateTime'对象) - 你实际上询问了2个问题 - 将'String'转换为时间值并将所述值与'日期'对象 - 我将重点解决如何实现其中一种方法 – MadProgrammer

+0

根据[SE 7]的Oracle文档(https://docs.oracle.com/javase)已弃用了大多数日期方法/7/docs/api/java/sql/Date.html)和[SE 8](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html)。因此,[Oracle建议改用日历及其方法](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html#getHours--)。 – hwdbc

+0

@hwdbc从Java 8开始 - 强烈建议使用新的Time API--因为'Calendar'是一个很好的例子,好意图做得很好 – MadProgrammer

回答

1

我会做的第一件事是获取值成某种格式,可以方便地进行比较。在我看来,这是使用Java 8的时间API(或JodaTime或者这种API,如果你还在使用Java的早期版本)

Date now = new Date(); 
LocalDateTime ldt = LocalDateTime.ofInstant(now.toInstant(), ZoneId.systemDefault()); 

String startValue = "09:00"; 
LocalTime startTime = LocalTime.parse(startValue, DateTimeFormatter.ISO_LOCAL_TIME); 

从此,它成为比较值的简单的事情

System.out.println(ldt.toLocalTime().equals(startTime) || 
            ldt.toLocalTime().isAfter(startTime)); 

我要把它留给你找出比较“之前”;)

+0

或'!ldt.toLocalTime()。isBefore(startTime)' – shmosel

+0

@shmosel我假设还有一个需要与“结束时间”进行比较的额外比较,尽管在本例中,我已经完成了包容性检查,您只需要删除“equals”来排除“startTime” – MadProgrammer

+0

@shmosel累了 - 我现在假设'startTime> && endTime MadProgrammer

相关问题