Android simpledateformat时间检查

时间:2012-07-11 16:42:17

标签: android simpledateformat

我正在尝试签入签到功能,用户无法在指定时间之前办理登机手续。在这个例子中,Ill说他们不能在晚上10点之前办理登机手续

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();                   
    }   
}

1 个答案:

答案 0 :(得分: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&lt;您只需致电new Date()即可获取当前日期&amp; time然后设置适当的时间,但不推荐使用所有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);