在java中检查当前时间位于两次

Kar*_*dia 2 java time android

我正在尝试检查当前时间是否介于Start Time和End time 之间。但我的方法总是返回false:

from = "5:10:00"; to = "10:10:00"


private boolean isTimeBetweenTwoTime(String from, String to) throws ParseException {
    SimpleDateFormat formatter = new SimpleDateFormat("H:mm:ss");

    Date date_from = formatter.parse(from);
    Date date_to = formatter.parse(to);

    Time startTime = new Time(date_from.getTime());
    Time endTime = new Time(date_to.getTime());

    Calendar c = Calendar.getInstance();
    Time now = new Time(c.getTimeInMillis());

    if (now.before(endTime) && now.after(startTime)) {
        Log.d(LOG_TAG, "Yes time between");
        return true;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

ΦXo*_*a ツ 5

问题是当你这样做时

Date date_from = formatter.parse(from);
Date date_to = formatter.parse(to);
Run Code Online (Sandbox Code Playgroud)

格式化程序是这样定义的:

SimpleDateFormat formatter = new SimpleDateFormat("H:mm:ss");
Run Code Online (Sandbox Code Playgroud)

然后是与 Java api 仅相关的时间,但日期对象包含的不仅仅是时间信息,它们也包含年、月等,并且这些对象正在初始化为纪元UNIXTime

所以你创建的初始日期是

欧洲中部时间 1970 年 1 月 1 日星期四 05:10:00 欧洲中部时间 1970 年 1 月 1 日星期四 10:10:00

所以询问今天/现在(2016 年 6 月 22 日)是否在这些日期之间永远不会返回 true...

另一方面,您的条件看起来是颠倒的,作为最后的提示,您不需要 SQL-Classes 进行计算,只需使用日期对象,您就会得到很好的结果

例子:

   public static void main(String[] args) throws ParseException {
    String from = "5:10:00";
    String to = "10:10:00";
    String n = "08:10:00";
    SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
    Date date_from = formatter.parse(from);
    Date date_to = formatter.parse(to);
    Date dateNow = formatter.parse(n);
    if (date_from.before(dateNow) && date_to.after(dateNow)) {
        System.out.println("Yes time between");
    }
    }
Run Code Online (Sandbox Code Playgroud)