/// <summary>
        /// Set the time horizon start time for an <see cref="ITimeSet"/>, assuming it is a
        /// <see cref="TimeSet"/>, if not, an exception is thrown. End time is unchanged,
        /// i.e. the duration will change.
        /// </summary>
        /// <param name="timeSet">Time set to update</param>
        /// <param name="timeHorizonStart">New time horizon start time</param>
        public static void SetTimeHorizonStart(this ITimeSet timeSet, ITime timeHorizonStart)
        {
            double startMjd   = timeHorizonStart.StampAsModifiedJulianDay;
            double endMjd     = timeSet.TimeHorizon.EndStampAsModifiedJulianDay();
            ITime  newHorizon = new Time(startMjd, endMjd - startMjd);

            timeSet.SetTimeHorizon(newHorizon);
        }