在java中检查当前时间是两次

时间:2016-06-21 23:57:32

标签: java android 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;
}

3 个答案:

答案 0 :(得分:3)

问题是当你这样做时

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

并且格式化器如此定义:

SimpleDateFormat formatter = new SimpleDateFormat("H:mm:ss");

然后是java api仅与时间相关,但是日期对象持有的不仅仅是时间信息,它们也保持年,月等等,并且那些正在逐渐形成一个时代UNIXTime

所以你创建的初始日期是

  

Thu Jan 01 05:10:00 CET 1970 and Thu Jan 01 10:10:00 CET 1970

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

另一方面,你的条件看起来是倒置的,作为最后的提示,你不需要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");
    }
    }

答案 1 :(得分:0)

java.time

您正在使用旧的过时类。它们已被Java 8及更高版本中内置的java.time类取代。功能的Mush已被反向移植到Java 6& 7在ThreeTen-Backport中,并在ThreeTenABP中进一步适应Android。

LocalTime

LocalTime类实际上真正代表了一个仅限时间的值,与问题中看到的java.sql.Timejava.util.Date类不同。

LocalTime start = LocalTime.of( 5 , 10 );
LocalTime stop = LocalTime.of( 10 , 0 );

时区

确定当前时间需要一个时区。对于任何特定时刻,时区在全球范围内按时区变化。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalTime now = LocalTime.now( zoneId );

比较

通过调用equals,isAfter或isBefore进行比较。我们在这里使用半开放式方法,这在日期工作中很常见,其中开头是包含,而结尾是独占

 Boolean isNowInRange = ( ! now.isBefore( start ) ) && now.isBefore( stop ) ;

答案 2 :(得分:-1)

检查

将您的日期传递给方法

public static int isValidDate(String start,String end){
        int valid=0;
        DateFormat formatter1 = new SimpleDateFormat("MM/dd/yyyy HH:MM:SS");
        Date d1 = null;
        Date d2 = null;
        Date d3 = null;
        Calendar curDate = Calendar.getInstance();
        SimpleDateFormat dfcurDate = new SimpleDateFormat("MM/dd/yyyy HH:MM:SS");
        String datecurrent = dfcurDate.format(curDate.getTime());
        try {
            d1 = formatter1.parse(datecurrent);
            d2 = new Date(Long.parseLong(end));
            d3 = new Date(Long.parseLong(start));
            System.out.println(d1.after(d3) && d1.before(d2));
            if (d1.after(d3) && d1.before(d2)) {
                valid=1;
           } } catch (Exception e) {
            e.printStackTrace();
        }
        return valid;
    }

如果返回1 - 当前