web-dev-qa-db-ja.com

ユーザー入力の日付と現在の日付の比較

こんにちは、ユーザーが入力した日付(文字列として)と現在の日付を比較して、日付が古いか古いかを確認しようとしています。

私の現在のコードは

String date;
Date newDate;
Date todayDate, myDate;     
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy");

while(true)
{
    Scanner s = new Scanner (System.in);
    date = s.nextLine();
    Calendar cal = Calendar.getInstance();
    try {
        // trying to parse current date here
        // newDate = dateFormatter.parse(cal.getTime().toString()); //throws exception

        // trying to parse inputted date here
        myDate = dateFormatter.parse(date); //no exception
    } catch (ParseException e) {
        e.printStackTrace(System.out);
    }

}

ユーザー入力日付と現在の日付の両方を2つのDateオブジェクトに取得しようとしているため、Date.compareTo()を使用して日付の比較を簡素化できます。

ユーザー入力文字列をDateオブジェクトに解析できました。ただし、現在の日付cal.getTime()。toString()は、無効な文字列であるため、Dateオブジェクトに解析されません。

これを行う方法は?前もって感謝します

8
kype

現在のDateを取得するには:

todayDate = new Date();

編集:時間コンポーネントを考慮せずに日付を比較する必要があるため、これを確認することをお勧めします: 時間部分なしで2つの日付を比較する方法?

一つの答えの「悪い形」にもかかわらず、私は実際にそれがとても好きです:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
sdf.format(date1).equals(sdf.format(date2));

あなたの場合、あなたはすでに持っています:

SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy");

だから私は(パフォーマンスよりも簡単にするために)考慮するでしょう:

todayDate = dateFormatter.parse(dateFormatter.format(new Date() ));
8
rolfl

指定された日時が現在の日時よりも大きいかどうかを確認するコードを次に示します。Belowメソッドは引数として特定の日時文字列を取り、returns true if if date-time is現在の日時よりも大きい。 #thmharsh

private boolean isExpire(String date){
    if(date.isEmpty() || date.trim().equals("")){
        return false;
    }else{
            SimpleDateFormat sdf =  new SimpleDateFormat("MMM-dd-yyyy hh:mm:ss a"); // Jan-20-2015 1:30:55 PM
               Date d=null;
               Date d1=null;
            String today=   getToday("MMM-dd-yyyy hh:mm:ss a");
            try {
                //System.out.println("expdate>> "+date);
                //System.out.println("today>> "+today+"\n\n");
                d = sdf.parse(date);
                d1 = sdf.parse(today);
                if(d1.compareTo(d) <0){// not expired
                    return false;
                }else if(d.compareTo(d1)==0){// both date are same
                            if(d.getTime() < d1.getTime()){// not expired
                                return false;
                            }else if(d.getTime() == d1.getTime()){//expired
                                return true;
                            }else{//expired
                                return true;
                            }
                }else{//expired
                    return true;
                }
            } catch (ParseException e) {
                e.printStackTrace();                    
                return false;
            }
    }
}


  public static String getToday(String format){
     Date date = new Date();
     return new SimpleDateFormat(format).format(date);
 }
3
ThmHarsh
 public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.

for(DataSnapshot dataSnapshot1 :dataSnapshot.getChildren()){

SimpleDateFormat sdf1234 = new SimpleDateFormat("dd-MM-yyyy hh:mm a");
                    String abs12 = value.getExpiryData();

                    Date todayDate = new Date();

                    try {
                        Date testDate1 = sdf1234.parse(abs12);

                        if(testDate1.compareTo(todayDate) <0){//  expired
                            dataSnapshot1.getRef().removeValue();
                        }
                        else if(testDate1.compareTo(todayDate)==0){// both date are same
                            if(testDate1.getTime() == todayDate.getTime() || testDate1.getTime() < todayDate.getTime())
                            {//  expired
                                dataSnapshot1.getRef().removeValue();
                            }
                            else
                                {//expired
                                //Toast.makeText(getApplicationContext(),"Successful praju ",Toast.LENGTH_SHORT).show();
                            }
                        }else{//expired
                           // Toast.makeText(getApplicationContext(),"Successful praju ",Toast.LENGTH_SHORT).show();
                        }
 } }
2
Prajwal W

あなたはこれを行うことができます。

// Make a Calendar whose DATE part is some time yesterday.
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.DATE, -1);

if (myDate.before(cal.getTime())) {
    //  myDate must be yesterday or earlier
} else {
    //  myDate must be today or later
}

calにはないため、myDateに時間コンポーネントがあることは問題ではありません。したがって、それらを比較すると、calmyDateが同じ日付である場合、時間コンポーネントは、時間に関係なく、calよりもmyDateを遅くします。コンポーネントです。

2

新しいDate()を作成すると、現在の日付を持つDateオブジェクトが得られます。

そう:

    Date currentDate = new Date();

仕事をする

1
Gigalala

Fomatは期待どおりに準拠していません。

 Calendar cal = Calendar.getInstance();
      System.out.println(cal.getTime().toString());

出力:2013年11月1日金曜日13:46:52 EET

0
Ahmet Karakaya