如何检查当前时间是否在android中的预设时间帧之间

时间:2014-06-16 12:35:33

标签: java android date time

Hai我现在有问题,我想检查当前时间是否说(10; 00am)是否在预设时间之间 框架说(晚上10点 - 凌晨4点)我该怎么做。 我尝试了一些并不总是满足条件

public class Test {

    static int flag;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // final Timer timer = new Timer();
        // Timer timer2 = new Timer();

        SimpleDateFormat parser = new SimpleDateFormat("HH.mm");
        Date start = null;
        Date end = null;
        try {
            start = parser.parse("22.00");
        } catch (ParseException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        try {
            end = parser.parse("8.00");
        } catch (ParseException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        try {
            Date userDate = parser.parse("23.06");
            if (userDate.after(start) && userDate.before(end)) {
                System.out.println("innnnnnnnnnnn");
            } else {
                System.out.println("outttttttttt");
            }
        } catch (ParseException e) {
            // Invalid date was entered
        }



    }
}

2 个答案:

答案 0 :(得分:2)

避免使用j.u.Date

通常,与Java捆绑在一起的java.util.Date和.Calendar以及SimpleDateFormat类非常麻烦,应该避免使用。专门针对您的需求,它们将日期组合在一起,而您似乎只想要一天中的时间。

使用合适的日期时间库。

本地时间

Joda-Time(和java.time)提供了一个LocalTime类来表示没有任何时区的时间。获取当前时间时,您应该传递DateTimeZone以将计算机/ JVM的日期时间调整为所需的时区而不是默认值。

半开

通常在日期时间工作中,比较时间跨度的最佳方法是使用“半开”方法。半开时,开头是包含,结尾是独占。请注意使用Joda-Time 2.3在此示例代码中进行比较。

Joda-Time示例

DateTimeZone timeZone = DateTimeZone.forID( "Asia/Kolkata" );
LocalTime now = LocalTime.now( timeZone ); // Adjust computer/JVM time zone's current time to desired time zone's current time.
LocalTime start = new LocalTime( "10:00:00" );
LocalTime stop = new LocalTime( "16:00:00" );
boolean isNotBeforeStart = ( ! now.isBefore( start ) );  // Is now equal to or after start?
boolean isBeforeEnd = now.isBefore( stop ); // Is now any time up to, but not including, stop?
boolean isWithinRange = ( isNotBeforeStart && isBeforeEnd );

答案 1 :(得分:1)

我了解您的方法,但您可能忘记了java.util.Date实例代表特定时刻。换句话说,它总是描述特定日期的特定时间。但是,您希望它在任何日描述时间23:06。

您可以使用日历而不是日期来获取各个字段(日,月,年,小时等):

    Date yourDateObject = ...;
    GregorianCalendar timeToCheck = new GregorianCalendar();
    timeToCheck.setTime(yourDateObject);
    int hour = timeToCheck.get(GregorianCalendar.HOUR_OF_DAY);

    if (hour >= 22 || hour < 8) {
        System.out.println("It's between 10 PM and 8 AM");
    }