Подтвердить что ты не робот

Преобразование десятичных часов в DD: ЧЧ: ММ

Im пытается конвертировать числовое число часов в дни, часы и минуты.

Это то, что у меня до сих пор, его еще не совсем. Мне нужно вычесть количество часов из дней с части часов, если это имеет смысл?

        /// <summary>
        /// Converts from a decimal value to DD:HH:MM
        /// </summary>
        /// <param name="dHours">The total number of hours</param>
        /// <returns>DD:HH:MM string</returns>
        public static string ConvertFromDecimalToDDHHMM(decimal dHours)
        {
            try
            {
                decimal hours = Math.Floor(dHours); //take integral part
                decimal minutes = (dHours - hours) * 60.0M; //multiply fractional part with 60
                int D = (int)Math.Floor(dHours / 24);
                int H = (int)Math.Floor(hours);
                int M = (int)Math.Floor(minutes);
                //int S = (int)Math.Floor(seconds);   //add if you want seconds
                string timeFormat = String.Format("{0:00}:{1:00}:{2:00}", D, H, M);

                return timeFormat;
            }
            catch (Exception)
            {
                throw;
            }
        }

РЕШЕНИЕ:

    /// <summary>
    /// Converts from a decimal value to DD:HH:MM
    /// </summary>
    /// <param name="dHours">The total number of hours</param>
    /// <returns>DD:HH:MM string</returns>
    public static string ConvertFromDecimalToDDHHMM(decimal dHours)
    {
        try
        {
            decimal hours = Math.Floor(dHours); //take integral part
            decimal minutes = (dHours - hours) * 60.0M; //multiply fractional part with 60
            int D = (int)Math.Floor(dHours / 24);
            int H = (int)Math.Floor(hours - (D * 24));
            int M = (int)Math.Floor(minutes);
            //int S = (int)Math.Floor(seconds);   //add if you want seconds
            string timeFormat = String.Format("{0:00}:{1:00}:{2:00}", D, H, M);

            return timeFormat;
        }
        catch (Exception)
        {
            throw;
        }
    }
4b9b3361

Ответ 1

Вы можете использовать TimeSpan.FromHours, чтобы получить промежуток времени, тогда у вас есть все, что вам нужно:

TimeSpan ts = TimeSpan.FromHours(Decimal.ToDouble(dHours));

Например:

int D = ts.Days;
int H = ts.Hours;
int M = ts.Minutes;

Ответ 2

Вам нужно вычесть (D * 24) из часов... или вы могли бы просто использовать:

int H = ((int) dHours) % 24;

Если вы все равно нажмете на int, не нужно звонить Math.Floor. Например, вы можете использовать:

// I'd rename dHours as well, by the way...
int wholeHours = (int) dHours;
int days = wholeHours / 24;
int hours = wholeHours % 24;
int minutse = (int) ((dHours % 1M) * 60);

С другой стороны, вам нужно быть осторожным, если это может быть отрицательным - в этом случае всевозможные вещи могут оказаться вялыми. Если вы не верите, что вам нужно это обработать, я бы явно проверил его и выбросил исключение, если dHours отрицательно, прежде чем что-либо делать.

(Обратите внимание, что ваш блок try/catch бессмыслен и отвлекает на данный момент. Просто избавитесь от него.)

Ответ 3

Почему бы не сделать что-то подобное?

double d = 25.23523;
Timespan t = TimeSpan.FromHours(d);

Это даст вам:

t = 1.01:14:06.8280000

Затем вы можете запросить объект TimeSpan по своему усмотрению: http://msdn.microsoft.com/en-us/library/system.timespan.aspx

ПРИМЕЧАНИЕ: TimeSpan.FromHours требуется вход double, а не decimal.

Ответ 4

Simple.

            double counter = 0.25;
            TimeSpan span = TimeSpan.FromMinutes(counter);
            textbox1.Text = span.ToString(@"hh\:mm\:ss");

результат будет 00:00:15 секунд, если счетчик = 1, тогда результат будет 00:01:00 и т.д.

Ответ 6

public static string GetTimeString(Decimal dHours)
{
    DateTime dTime = new DateTime().AddHours(dHours);
    return dTime.ToString("HH:mm:ss");    // HH: 24h or hh: 12h
}