public void setDate(Instant date) {
   if (date == null) {
     this.date = null;
   } else {
     this.date = date.toString(DATE_FORMAT);
   }
 }
 // reduce duration by one on each tick of the clock
 void tick() {
   duration -= 1;
   if (duration < 0) {
     log.error(
         getName() + "SE start at " + start.toString() + " ticked past duration " + duration);
   }
   usageIndex += 1;
 }
 // Returns the ShiftEnergy instance for the current time
 // Note that for this to work, the ShiftEnergy.tick() method
 // must be called once/timeslot.
 ShiftEnergy getCurrentNeed(Instant when) {
   if (null == needs) return null;
   for (int i = 0; i < needs.length; i++) {
     // if it's the last one, return it.
     if ((i == needs.length - 1) || (needs[i + 1].getStart().isAfter(when))) {
       return needs[i];
     }
   }
   // should never get here
   log.error(
       getName()
           + " at "
           + when.toString()
           + " ran off end of plan length "
           + size
           + " starting "
           + start.toString());
   return null;
 }