Si può fare di meglio. E tra l'altro il tuo codice non sta considerando e applicando uno dei punti indicati:
4) qualsiasi modifica richiesta con qualsiasi altro metodo viene annullata se porta ad un orario non valido (ovvero viene ripristinato l’ultimo orario valido)