public synchronized boolean equals(java.lang.Object obj) {
   if (!(obj instanceof DateTime)) return false;
   DateTime other = (DateTime) obj;
   if (obj == null) return false;
   if (this == obj) return true;
   if (__equalsCalc != null) {
     return (__equalsCalc == obj);
   }
   __equalsCalc = obj;
   boolean _equals;
   _equals =
       true
           && ((this.date == null && other.getDate() == null)
               || (this.date != null && this.date.equals(other.getDate())))
           && ((this.hour == null && other.getHour() == null)
               || (this.hour != null && this.hour.equals(other.getHour())))
           && ((this.minute == null && other.getMinute() == null)
               || (this.minute != null && this.minute.equals(other.getMinute())))
           && ((this.second == null && other.getSecond() == null)
               || (this.second != null && this.second.equals(other.getSecond())))
           && ((this.timeZoneID == null && other.getTimeZoneID() == null)
               || (this.timeZoneID != null && this.timeZoneID.equals(other.getTimeZoneID())));
   __equalsCalc = null;
   return _equals;
 }