Please see/read below, and scroll down...sharing my code below. :)
Look for the 'delay...' method below, and how often it is called before 'every' google calendar API call/method. My delete events method skips all-day events except for the events that begin on or within the selected date (range).
  private void addEventToCalendar(GoogleCalendarEvent eventToAdd) throws Exception {
    try {
      Event event = new Event();
      event.setSummary(eventToAdd.getSummary());
      event.setDescription(eventToAdd.getDescription());
      event.setLocation(eventToAdd.getLocation());
      Â
      DateTime startDateTime = new DateTime(eventToAdd.getStart(), TimeZone.getTimeZone("UTC"));
      event.setStart(new EventDateTime().setDateTime(startDateTime));
      Â
      DateTime endDateTime = new DateTime(eventToAdd.getEnd(), TimeZone.getTimeZone("UTC"));
      event.setEnd(new EventDateTime().setDateTime(endDateTime));
      Â
      oAuthRequestAccess();
      delayIfNecessaryAndUpdateCounter();
      client.events().insert(calendarEntry.getId(), event).execute();
    } catch (GoogleJsonResponseException googleJsonException) {
      addEventToLog(eventToAdd);
      String msg = "caught the following exception: " +
             googleJsonException.getDetails().toPrettyString();
      throw googleJsonException;
    } catch (Exception e) {
      addEventToLog(eventToAdd);
      String msg = "caught the following exception: " +
             (e.getMessage() != null ? e.getMessage() : e.getLocalizedMessage());
      throw e;
    }
  }
  Â
  private void addEventToLog(GoogleCalendarEvent event) {
    String description = (event.getDescription() != null ? event.getDescription() : "null"),
        location = (event.getLocation() != null ? event.getLocation() : "null"),
        log,
        summary = (event.getSummary() != null ? event.getSummary() : "null");
    log = "Start: " + (new org.joda.time.DateTime(event.getStart())).toString("MM/dd/yyyy") +
       "; End: " + (new org.joda.time.DateTime(event.getEnd())).toString("MM/dd/yyyy") +
       "\nSummary: " + summary +
       "\nLocation: " + location +
       "\nDescription: " + description;
  }
  Â
  /*
   *Â
   * Calendar API
   * 5.0 requests/second/user
   */
  private void delayIfNecessaryAndUpdateCounter() {
    org.joda.time.DateTime dateTime, now;
    now = org.joda.time.DateTime.now();
    if (lastRequest == null ||
      now.isAfter(new org.joda.time.DateTime(lastRequest).plusSeconds(5))) {
      Â
      apiRequestCounter = 0;
    }
    else if (apiRequestCounter > 3) {
      dateTime = org.joda.time.DateTime.now().plusSeconds(5);
      now = org.joda.time.DateTime.now();
      while (true) {
        if (now.isAfter(dateTime)) {
          break;
        }
        now = org.joda.time.DateTime.now();
      }
      apiRequestCounter = 0;
    }
    apiRequestCounter += 1;
    lastRequest = new Date();
  }
  Â
  public void deleteAndAddEvents(Date start, Date end,
                  List<GoogleCalendarEvent> eventsToAdd) throws Exception {
    deleteEventsViaRetries(start, end);
    for (GoogleCalendarEvent event : eventsToAdd) {
      addEventToCalendar(event);
    }
  }
  Â
  /*
   * One of the following should meet requirement of delete via retries:
   *Â
   * 1. delete events UNTIL NO events deleted (deleteEvents(...) returns false)
   * 2. delete events AT LEAST 3 to 5 times
   */
  public void deleteEventsViaRetries(Date start, Date end) throws Exception {
    // delete events until no events deleted
    while (true) {
      if (!deleteEvents(start, end)) {
        break;
      }
    }
  }
  Â
  private Boolean deleteEvents(Date start, Date end) throws Exception {
    Boolean eventsDeleted = false;
    try {
      // will be used to only delete events that start on argument start date
      DateTime startDateTime = new DateTime(start, TimeZone.getTimeZone("UTC"));
      DateTime endDateTime = new DateTime(end, TimeZone.getTimeZone("UTC"));
      Â
      String eventDate, startDate, endDate;
      Â
      // RFC 3339 date format (e.g. 2011-06-03T10:00:00.000-07:00)
      startDate = startDateTime.toStringRfc3339();
      startDate = startDate.substring(0, 10);
      Â
      endDate = endDateTime.toStringRfc3339();
      endDate = endDate.substring(0, 10);
      Â
      Boolean deleteARangeOfDates = true;
      if (startDate.equals(endDate)) {
        deleteARangeOfDates = false;
      }
      Â
      org.joda.time.DateTime timeMin, timeMax;
      timeMin = new org.joda.time.DateTime(start).withHourOfDay(0).withMinuteOfHour(0);
      if (end != null) {
        timeMax = new org.joda.time.DateTime(end).withHourOfDay(23).withMinuteOfHour(59);
      }
      else {
        timeMax = new org.joda.time.DateTime(start).withHourOfDay(23).withMinuteOfHour(59);
      }
      Â
      oAuthRequestAccess();
      delayIfNecessaryAndUpdateCounter();
      Events events = client.events().list(calendarEntry.getId())
              .setTimeMin(new DateTime(timeMin.toDate(), TimeZone.getTimeZone("UTC")))
              .setTimeMax(new DateTime(timeMax.toDate(), TimeZone.getTimeZone("UTC")))
              .execute();
      //
logger.info("GoogleCalendarUtil.updateEventsOnSingleDate(): existing EVENTS to delete = " + events.getItems().size());
      if (events.getItems() != null && !events.getItems().isEmpty()) {
        while (true) {
          for (Event event : events.getItems()) {
            eventDate = event.getStart().getDateTime().toStringRfc3339();
            eventDate = eventDate.substring(0, 10);
            /*
             * 1. when NOT deleting a range of dates, then only delete events
             *   that start on argument start date
             * 2. when deleting a range of dates, then only delete events
             *   that start on or after argument start date
             */
            if (deleteARangeOfDates) {
              if (eventDate.compareTo(startDate) >= 0) {
                delayIfNecessaryAndUpdateCounter();
                client.events().delete(calendarEntry.getId(), event.getId()).execute();
                eventsDeleted = true;
              }
            }
            else {
              if (startDate.equals(eventDate)) {
                delayIfNecessaryAndUpdateCounter();
                client.events().delete(calendarEntry.getId(), event.getId()).execute();
                eventsDeleted = true;
              }
            }
          }
          String pageToken = events.getNextPageToken();
          if (pageToken != null && !pageToken.isEmpty()) {
            delayIfNecessaryAndUpdateCounter();
            events = client.events().list(calendarEntry.getId()).setPageToken(pageToken).execute();
          } else {
            break;
          }
        }
      }
      Â
    } catch (GoogleJsonResponseException googleJsonException) {
      String msg = "GoogleCalendarUtil.deleteEvents(): " +
             googleJsonException.getDetails().toPrettyString();
      throw googleJsonException;
    } catch (Exception e) {
      String msg = "GoogleCalendarUtil.deleteEvents(): " + e.getMessage();
      throw e;
    } finally {
      // cleanup
    }
    return eventsDeleted;
  }