예제 #1
0
        /// <summary>   Formats a timespan to a string like "3 min 4 sec". </summary>
        ///
        /// <param name="timespan">             The timespan. </param>
        /// <param name="verbosity">            The verbosity. </param>
        /// <param name="unitSpacer">           true to insert a space before each unit. </param>
        /// <param name="includeZeros">         true to include those parts of the timespan that are zero,
        ///                                     starting with hours, e.g. "0h 2m 0s" instead of just "2m". </param>
        /// <param name="includeSplitSeconds">  true to include, false to exclude the fractions of the second portion. </param>
        /// <param name="numberFormatCulture">  The Culture to use for number formatting. Since
        ///                                     milliseconds are displayed as fractions of seconds, this
        ///                                     effects the decimal delimiter. By default, the
        ///                                     DefaultThreadCurrentCulture is used. </param>
        ///
        /// <returns>   The formatted value. </returns>
        public static string Format(TimeSpan timespan, FormatVerbosities verbosity = FormatVerbosities.Normal, bool unitSpacer = true, bool includeZeros = true, bool includeSplitSeconds = true, CultureInfo numberFormatCulture = null)
        {
            string result = "";

            if (verbosity == FormatVerbosities.SuperBrief)
            {
                result = timespan.ToString();
                // The system's ToString() will add a fixed number of 0 for the millisecond fraction (e.g. 12:30:05.1200000)
                // but we want to return only the significant digits
                if (timespan.Milliseconds != 0)
                {
                    result = result.TrimEnd('0');
                }
            }
            else
            {
                string unitInsert = unitSpacer ? " " : "";
                result += CreateUnitString(timespan.Days, C_DAY_UNITS[verbosity], unitInsert, createIfZero: false, numberFormatCulture: numberFormatCulture);
                result += CreateUnitString(timespan.Hours, C_HOUR_UNITS[verbosity], unitInsert, includeZeros, numberFormatCulture: numberFormatCulture);
                result += CreateUnitString(timespan.Minutes, C_MINUTE_UNITS[verbosity], unitInsert, includeZeros, numberFormatCulture: numberFormatCulture);
                result += CreateUnitString(timespan.Seconds + (includeSplitSeconds ? timespan.Milliseconds / 1000.0 : 0), C_SECOND_UNITS[verbosity], unitInsert, includeZeros, numberFormatCulture: numberFormatCulture);
            }

            return(result.Trim());;
        }
예제 #2
0
 /// <summary>
 /// Time span format attribute.
 /// </summary>
 /// <param name="allowNone"></param>
 /// <param name="allowNegative"></param>
 /// <param name="verbosity"></param>
 public TimeSpanFormatAttribute(bool allowNone = false, bool allowNegative = false, FormatVerbosities verbosity = FormatVerbosities.Normal)
 {
     AllowNone     = allowNone;
     AllowNegative = allowNegative;
     Verbosity     = verbosity;
 }