-4

2 つの日時値があり、それらを比較する方法がわかりません。日付値しかない場合は before() および after() メソッドが機能することはわかっていますが、Datetime 値についてはわかりません。私が行ったのは以下のことだけです。正しいかどうか教えてください?? それが良い方法ではなく、より良い代替手段が利用可能な場合は、私を案内してください.

Date now = new Date();
DateTime currenttime = new DateTime(now, TimeZone.getTimeZone("IST"));
DateTime edate = e.getEnd().getDateTime();                 
if(currenttime.getValue()>edate.getValue())
{
       //here I want to do the logic to delete this event.         
}

e は、Google カレンダーのイベント オブジェクトを指します。ここでやりたいことは、イベント e が今日の日付と時刻を過ぎているかどうかを確認することだけです。もしそうなら、私はイベントを削除したい.

4

2 に答える 2

1

jdk Calendar を使用して、日付を取得および確認できます。

public boolean isDatePass(Date date) {
    Calendar calendar = Calendar.getInstance();

    // Getting day of year and year of checked date:
    calendar.setTime(date);
    int checkedYear = calendar.get(Calendar.YEAR);
    int checkedDay = calendar.get(Calendar.DAY_OF_YEAR);

    // Getting day of year and year of current date:
    calendar.setTime(new Date());
    int currentYear = calendar.get(Calendar.YEAR);
    int currentDay = calendar.get(Calendar.DAY_OF_YEAR);

    if(checkedYear != currentYear) {
        return checkedYear < currentYear;
    }

    return checkedDay < currentDay;

}

Yoda DateTime の場合:

public boolean isDatePass(DateTime date) {
    // Getting day of year and year of checked date:
    int checkedYear = date.getYear();
    int checkedDay = date.getDayOfYear();

    // Getting day of year and year of current date:
    DateTime currentTime = new DateTime(now, TimeZone.getTimeZone("IST"));
    int currentYear = currentTime.getYear();
    int currentDay = currentTime.getDayOfYear();

    if(checkedYear != currentYear) {
        return checkedYear < currentYear;
    }

    return checkedDay < currentDay;

}

日だけではなく、時間:

public boolean isDatePass(DateTime date) {

    DateTime currentTime = new DateTime(now, TimeZone.getTimeZone("IST"));
    return date.isAfter(currentTime);
}

より単純な解決策(isAfter / isBeforeにnullを渡すときのjavadocによると、これは現在または現在を意味します):

public boolean isDatePass(DateTime date) {
    return date.isAfter(null); // but it does not take in account time zone
}
于 2012-05-25T06:15:59.570 に答える
0
public String deleteEvents() throws ParseException {
    try {

        boolean evtDelMsg = false;
        int iEvtCnt = 0;
        int totalEvents = lstEvents.size();

        System.out.println("events are :"+lstEvents.getItems().toString());

        if(lstEvents.size()>0)
        {
                for(Event e : lstEvents.getItems())
                {
                    System.out.println("startdate is "+e.getStart().toString());
                    Date now = new Date();                 

                   try
                   { 
                      if((new Date()).getTime() < e.getEnd().getDateTime().getValue())
                      {
                         evtDelMsg = EventManager.deleteEvent(getGoogleCalObj(), selectedCalId, e.getId());
                        iEvtCnt++; 
                      }
                   }
                   catch(NullPointerException npe)
                   {
                     System.out.println("edate is null so creating");
                     processImportedEventsData();
                   }
               }
        }
        else
        {
            System.out.println("no events in this calendar");
        }

        setInfoMsg("Successfully deleted " + iEvtCnt + " Events out of total " + totalEvents);

        createEventFlag = true;            
        processImportedEventsData();     

    } 
    catch (IOException ex)
    {
        Logger.getLogger(ManageCalendar.class.getName()).log(Level.SEVERE, null, ex);
    }       
    return null;
}

これは私にとってはうまくいきました。私は単純にイベントの「e」日付と時刻の長い値を使用し、今日の日付時刻と比較しました。これにより、少し簡単になりました。そして、ループ内で、EventManager の deleteEvent() を呼び出すすべてのイベントを削除しました。

于 2012-06-18T06:02:05.540 に答える