Android simpledateformat时间检查

Android simpledateformat时间检查,android,simpledateformat,Android,Simpledateformat,我正在尝试创建一个签入签出功能,用户在指定时间之前无法签入。在这个例子中,我说他们要到晚上10点才能办理登机手续 计划\开始字符串=10:00,24小时格式 如果用户试图在10:00之前签入,则会出现一个警报对话框,告诉他们要提前,并尝试在10:00重新签入 我的问题是alertdialog对话框总是出现,即使在指定的时间之后 有人能帮我指引正确的方向吗 SimpleDateFormat parserSDF = new SimpleDateFormat("k:m"); t

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

计划\开始字符串=10:00,24小时格式

如果用户试图在10:00之前签入,则会出现一个警报对话框,告诉他们要提前,并尝试在10:00重新签入

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

有人能帮我指引正确的方向吗

    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();                   
    }   
}
SimpleDateFormat parserSDF=新的SimpleDateFormat(“k:m”);
试一试{
日期d=parserSDF.parse(计划开始);
Calendar now=Calendar.getInstance();
Date CurrentTime=now.getTime();
如果(d.before(CurrentTime)){
tooearlytocheckin=新建AlertDialog.Builder(
screen1.this.create();
WindowManager.LayoutParams lp=tooearlytocheckin.getWindow().getAttributes();
lp.dimAmount=.30f;
tooearlytocheckin.getWindow().setAttributes(lp);
tooearlytocheckin.getWindow().addFlags(WindowManager.LayoutParams.FLAG\u DIM\u落后);
tooearlytocheckin.setTitle(“警告”);
tooearlytocheckin.setCancelable(false);
setMessage(“现在签入还太早。”+“请在“+(计划开始)”处重试”;
tooearlytocheckin.setButton(“确定”,新建DialogInterface.OnClickListener()){
@凌驾
public void onClick(DialogInterface dialog,int which){
DefaultWidgetVisibilityGONE();

CancelInButtonInstructions();//以下是一些指针:

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()
检索当前日期和时间,然后设置一天中的适当时间,但所有日期都是如此。set()方法已被弃用,取而代之的是日历对象。因此,让我们切换到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
与:


我想你可能知道一些事情,但是字符串计划开始并不总是设置为10:00,每个用户都有自己独特的报到时间,比如用户A可以在10:00报到,用户B可以在5:00报到等等。所以我不确定你的建议是否有帮助。但是谢谢你的回复!你会有一些新的观点吗rs对我来说?允许单独的签入时间是很容易的。每个用户的签入时间存储在哪里?它存储在一个SQL数据库中,用户将根据他们的用户信息凭据点击该数据库,该数据库会输出他们信息的json格式。我更新了我的答案,以解析您已经拥有的字符串格式。我真的很同意感谢你为帮助我所做的一切,山姆,你的建议奏效了!我唯一改变的是if(scheduled.before(current))我把它改为if(current.before(scheduled))谢谢!!!!
scheduled.set(Calendar.HOUR_OF_DAY, hour);
scheduled.set(Calendar.MINUTE, minute);