Расчет времени с использованием модуля с возможными ошибками округления - PullRequest
1 голос
/ 12 марта 2019

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

Я рассчитываю время в секундах, которое может превышать 24 часа, поэтому hhh:mm:ss.Я использую это для форматирования меток на графике из Live Charts.В моем коде я использую следующий код для его вычисления:

public Func<double, string> Formatter { get; set; }

Formatter = value => (((value - (value % 3600)) / 3600) + ":" + (((value % 3600) - (value % 60)) / 60) + ":" + (value % 60));

Это работает нормально, но иногда приводит к:

222:3:4

, но я хочу:

222:03:04

Я нашел следующий код для создания string.Format, но я не знаю, как его применить, когда я использую Func<>:

static string Method1(int secs)
{
    int hours = secs / 3600;
    int mins = (secs % 3600) / 60;
    secs = secs % 60;
    return string.Format("{0:D2}:{1:D2}:{2:D2}", hours, mins, secs);
}

Как я могу применить этоstring.Format когда я использую public Func<double, string> для расчета времени за 24 часа.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Вы можете использовать string.Format внутри вас public Func<double, string>, просто примените значения в качестве параметров, а не одну строку:

Formatter = value => string.Format("{0:D2}:{1:D2}:{2:D2}", (int)(value - (value % 3600)) / 3600, (int)((value % 3600) - (value % 60)) / 60, (int)value % 60);

В качестве альтернативы, как уже говорилось, возможно, лучше использовать встроенные функции.

0 голосов
/ 12 марта 2019

Вы должны использовать один из стандартных форматеров TimeSpan.Вероятно, «г»:

static string Method1(int secs)
{
    var ts = new TimeSpan.FromSeconds(secs);
    return ts.Format('g');
}

https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-timespan-format-strings?view=netframework-4.7.2

...