docs: private synchronized void load(int year) {
          if (alreadyLoadedYears.contains(year)) {
              return;
          }
  
          alreadyLoadedYears.add(year);
  
          ZonedDateTime st = ZonedDateTime.of(LocalDate.now().with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN, ZoneId.systemDefault());
          ZonedDateTime et = ZonedDateTime.of(LocalDate.now().with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX, ZoneId.systemDefault());
  
          try {
              startBatchUpdates();
  
              /*
               * Convert start and end times from new java.time API to old API and then to ical API :-)
               */
              Period period = new Period(
                      new DateTime(Date.from(st.toInstant())),
                      new DateTime(Date.from(et.toInstant())));
  
              Rule[] rules = new Rule[]{new PeriodRule(period)};
              Filter filter = new Filter(rules, Filter.MATCH_ANY);
  
              @SuppressWarnings("unchecked")
              Collection<VEvent> events = filter.filter(calendar.getComponents(Component.VEVENT));
  
              for (VEvent evt : events) {
  
                  if (loadedEventIds.contains(evt.getUid())) {
                      continue;
                  }
  
                  loadedEventIds.add(evt.getUid());
  
                  ICalCalendarEntry entry = new ICalCalendarEntry(evt);
  
                  ZonedDateTime entryStart = ZonedDateTime.ofInstant(evt.getStartDate().getDate().toInstant(), ZoneId.systemDefault());
  
                  ZonedDateTime entryEnd = ZonedDateTime.ofInstant(evt
                                  .getEndDate().getDate().toInstant(),
                          ZoneId.systemDefault());
  
                  if (entryEnd.toLocalDate().isAfter(entryStart.toLocalDate())) {
                      entryEnd = entryEnd.minusDays(1);
                      entry.setFullDay(true);
                  }
  
                  entry.setInterval(new Interval(entryStart, entryEnd));
  
                  final Property prop = evt.getProperty("RRULE");
                  if (prop instanceof RRule) {
                      RRule rrule = (RRule) prop;
                      entry.setRecurrenceRule("RRULE:" + rrule.getValue());
                  }
  
                  addEntry(entry);
              }
          } catch (Exception ex) {
              ex.printStackTrace();
          } finally {
              stopBatchUpdates();
          }
      }