title: How to fix 'NotSerializableException: java.time.format.DateTimeFormatter' Error
body: <p>I am trying to use ObjectOutputStream to save all objects in an Arraylist to file. An attribute of the object is a LocalDate and whenever I try to write to file an error NotSerializableException: java.time.format.DateTimeFormatter returns despite having no DateTimeFormatter for any of the LocalDates</p>
  
  <p>Full Error: </p>
  
  <pre><code>java.io.NotSerializableException: java.time.format.DateTimeFormatter
      at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1185)
      at java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1553)
      at java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1510)
      at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
      at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179)
      at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)
      at java.base/java.util.ArrayList.writeObject(ArrayList.java:791)
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.base/java.lang.reflect.Method.invoke(Method.java:564)
      at java.base/java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1130)
      at java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1497)
      at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
      at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179)
      at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)
      at BikeNow.saveRent(BikeNow.java:330)
      at BikeNow.main(BikeNow.java:114)
  </code></pre>
  
  <p>The method using Object output Stream</p>
  
  <pre><code>public void saveRent() {
          //Create file and object output stream
          try {
              FileOutputStream fos = new FileOutputStream("tmp.dat");
              ObjectOutputStream oos = new ObjectOutputStream(fos);
  
              //Write array to file
              oos.writeObject(rents);
              oos.close();
              fos.close();
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  </code></pre>
  
  <p>An Example of object trying to be saved to file</p>
  
  <pre><code>rents.add(new Rent(0001, "John Smith", true, "Roubaix Sport", LocalDate.of(2019, 03, 06), LocalDate.of(2019, 04, 05), 30, true));
  </code></pre>
  
  <p>The Object Class</p>
  
  <pre><code>import java.io.Serializable;
  import java.time.LocalDate;
  
  public class Rent extends Customer implements Serializable {
      private LocalDate startDate;
      private LocalDate endDate;
      private int duration;
      private boolean overdue;
  
  public Rent(int customerID, String customerName,  boolean renting, String bikeRented, LocalDate startDate, LocalDate endDate, int duration, boolean overdue) {
          super(customerID, customerName,  renting, bikeRented);
          this.startDate = startDate;
          this.endDate = endDate;
          this.duration = duration;
          this.overdue = overdue;
      }
  </code></pre>