File: DatetimeUtility.cs
Web Access
Project: src\src\nuget-client\src\NuGet.Core\NuGet.Common\NuGet.Common.csproj (NuGet.Common)
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Globalization;

namespace NuGet.Common
{
    /// <summary>
    /// static class to provide datetime common utility apis
    /// </summary>
    public static class DatetimeUtility
    {
        /// <summary>
        /// take timespan n return in appropriate unit like ms, or seconds, or minutes, or hours
        /// </summary>
        /// <param name="time">timespan</param>
        /// <returns>A human-readable timespan string</returns>
        public static string ToReadableTimeFormat(TimeSpan time)
        {
            return ToReadableTimeFormat(time, CultureInfo.CurrentCulture);
        }

        internal static string ToReadableTimeFormat(TimeSpan time, IFormatProvider format)
        {
            // initially define as hours
            double result = time.TotalHours;

            if (time.TotalSeconds < 1)
            {
                result = time.TotalMilliseconds;
                // If less than 1 ms, show only 1 significant figure
                if (result >= 1)
                {
                    result = Math.Round(result, 0);
                }
                else if (result >= 0.1)
                {
                    result = Math.Round(result, 1);
                }

                return string.Format(format, Strings.TimeUnits_Millisecond, result);
            }
            else if (time.TotalMinutes < 1)
            {
                result = time.TotalSeconds;
                return string.Format(format, Strings.TimeUnits_Second, result);
            }
            else if (time.TotalHours < 1)
            {
                result = time.TotalMinutes;
                return string.Format(format, Strings.TimeUnits_Minute, result);
            }

            return string.Format(format, Strings.TimeUnits_Hour, result);
        }
    }
}