0

我试图制作一个签入签出功能,用户在指定时间之前无法签入。在这个例子中,我会说他们要到晚上 10:00 才能办理入住

schedule_start string = 10:00 24 小时制

如果用户尝试在 10:00 之前签到,则会出现一个警告对话框,告诉他们要早点并尝试在 10:00 之前签到

我的问题是警报对话框总是出现,即使在指定的时间之后。

有人可以帮助我朝着正确的方向前进吗?

    SimpleDateFormat parserSDF = new SimpleDateFormat("k:m");   

    try {
        Date d = parserSDF.parse(schedule_start);   
        Calendar now = Calendar.getInstance();      
        Date CurrentTime = now.getTime(); 

        if (d.before(CurrentTime))  { 

            tooearlytocheckin = new AlertDialog.Builder(
                    screen1.this).create(); 
            WindowManager.LayoutParams lp = tooearlytocheckin.getWindow().getAttributes();
            lp.dimAmount = .30f; 
            tooearlytocheckin.getWindow().setAttributes(lp);
            tooearlytocheckin.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
            tooearlytocheckin.setTitle("              WARNING");
            tooearlytocheckin.setCancelable(false);
            tooearlytocheckin.setMessage("It is still too early for you to check in." + " Try back at " + (schedule_start));

            tooearlytocheckin.setButton("OK", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {

                    DefaultWidgetVisibilityGONE();
                    CancelInButtonInstructions();  // <--- Use this setting for displaying view after pressing Okay


                    vib.vibrate(40);
                }
            });
            tooearlytocheckin.show();

            if (d.after(CurrentTime))   {
            CheckInToggleButtonInstructions();
            }
        }

    } catch (java.text.ParseException e1) {                                         
        e1.printStackTrace();                   
    }   
}
4

1 回答 1

1

这里有几个指针:

SimpleDateFormat parserSDF = new SimpleDateFormat("k:m");   

通过使用k,您要求 1-24 小时的时间,而不是 0-23 ......我相信你想要HH:mm

Date d = parserSDF.parse("10:00");   

这会将小时和分钟设置为上午 10 点,但日期未指定,因此默认为:1-1-1970...d总是之前,CurrentTime因为 1970 < 2012。您可以简单地调用new Date()以检索当前日期和时间,然后设置适当的时间的一天,但所有 Date.set() 方法都被弃用,有利于 Calendar 对象。所以让我们切换到 Calendar 类:

Calendar current = Calendar.getInstance();

Calendar scheduled = Calendar.getInstance();
scheduled.set(Calendar.HOUR_OF_DAY, 10);
scheduled.set(Calendar.MINUTE, 0);
scheduled.set(Calendar.SECOND, 0);

if(scheduled.before(current)) {
    // Do as you please
}

使用这种方法,我们不会带来与 try-catch 块或 Calendar 以外的任何类相关的开销。希望有帮助。

从评论添加

如果向用户呈现不同的用户时间,并且您当前以“小时:分钟”格式检索时间,则使用以下命令:

// scheduled_start looks like "23:45"
String[] times = scheduled_start.split(":");
int hour = Integer.parseInt(times[0]); // this'll be 23
int minute = Integer.parseInt(times[1]); // this'll be 45

和:

scheduled.set(Calendar.HOUR_OF_DAY, hour);
scheduled.set(Calendar.MINUTE, minute);
于 2012-07-11T17:37:43.287 回答