/// <summary>
        /// Return a formatter based on this factory's current settings.
        /// </summary>
        ///
        /// <returns>a BasicDurationFormatter</returns>
        public virtual DurationFormatter GetFormatter()
        {
            if (f == null)
            {
                if (fallback != null)
                {
                    fallback = fallback.WithLocale(localeName).WithTimeZone(
                        timeZone);
                }
                formatter = GetPeriodFormatter().WithLocale(localeName);
                builder   = GetPeriodBuilder().WithLocale(localeName).WithTimeZone(
                    timeZone);

                f = CreateFormatter();
            }
            return(f);
        }
 /// <summary>
 /// Clear the cached formatter. Subclasses must call this if their state has
 /// changed. This is automatically invoked by setBuilder, setFormatter,
 /// setFallback, setLocaleName, and setTimeZone
 /// </summary>
 ///
 protected internal void Reset()
 {
     f = null;
 }