-4

我有两个日期时间值,我不知道如何比较它们。我知道如果我只有日期值,那么 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 指的是谷歌日历的事件对象。我在这里要做的就是检查事件 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;

}

对于尤达日期时间:

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

更简单的解决方案(根据 javadoc 将 null 传递给 isAfter/isBefore 这意味着当前或现在):

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”日期和时间,并与今天的日期时间进行比较。getValue() 方法以毫秒为单位返回长值。这让它变得有点简单。然后在循环中我删除了所有调用 EventManager 的 deleteEvent() 的事件。

于 2012-06-18T06:02:05.540 回答