I suppose you can hide the End Date attribute from the form of the Appointment object and add an attribute of the Duration type (for example AppointmentDuration). Then you can add a rule that will automatically calculate the EndDate attribute:
Appointment.EndDate = Appointment.StartDate + Appointment.AppointmentDuration