0

指定された時間までユーザーがチェックインできないチェックインチェックアウト機能を作成しようとしています。この例では、午後10時までチェックインできないと言います

schedule_start string = 10:0024時間形式

ユーザーが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();                   
    }   
}
4

1 に答える 1

1

ここにいくつかのポインタがあります:

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

使用kすることにより、0〜23時間ではなく、1〜24時間の時間を要求しています...私はあなたが望むと信じていますHH:mm

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

dこれにより、時間と分が午前10時に設定されますが、日付は指定されていないため、デフォルトは次のようになりますCurrentTimenew 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 に答える