Преобразовать десятичные часы в ДД: ЧЧ: ММ - PullRequest
14 голосов
/ 14 марта 2012

Я пытаюсь преобразовать десятичное число часов в дни, часы и минуты.

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

        /// <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;
        }
    }

Ответы [ 6 ]

38 голосов
/ 14 марта 2012

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

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

Например:

int D = ts.Days;
int H = ts.Hours;
int M = ts.Minutes;
3 голосов
/ 14 марта 2012

Вам нужно вычесть (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 не имеет смыслаи отвлекает в данный момент. Просто избавьтесь от этого.)

2 голосов
/ 16 апреля 2014

Простой.

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

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

2 голосов
/ 14 марта 2012

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

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.

0 голосов
/ 04 апреля 2014
public static string GetTimeString(Decimal dHours)
{
    DateTime dTime = new DateTime().AddHours(dHours);
    return dTime.ToString("HH:mm:ss");    // HH: 24h or hh: 12h
}
0 голосов
/ 14 марта 2012

вот еще один пост, который объясняет это довольно хорошо.

Преобразование даты в формат строки гггг-мм-дд ЧЧ: ММ: СС - C #

MyDateTime.ToString ("гггг-ММ-дд чч: мм: сс«);

также

http://blog.stevex.net/string-formatting-in-csharp/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...