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

С# + Формат TimeSpan

Я пытаюсь отформатировать элемент TimeSpan в формате "[минуты]: [секунды]". В этом формате 2 минуты и 8 секунд будут выглядеть как "02:08". Я пробовал различные варианты с String.Format и ToString методами, но я получаю FormatException. Это то, что я сейчас пытаюсь сделать:

DateTime startTime = DateTime.Now;
// Do Stuff
TimeSpan duration = DateTime.Now.Subtract(startTime);

Console.WriteLine("[paragraph of information] Total Duration: " + duration.ToString("mm:ss"));

Что я делаю неправильно? Как мне отформатировать элемент TimeSpan с помощью моего желаемого формата?

Спасибо

4b9b3361

Ответ 1

Попробуйте следующее:

Console.WriteLine("{0:D2}:{1:D2}", duration.Minutes, duration.Seconds);

Ответ 2

ПРИМЕЧАНИЕ. Этот ответ относится только к .NET 4.0.

Символ двоеточия является литералом и его нужно обернуть в одинарные кавычки:

duration.ToString("mm':'ss")

Из документация MSDN:

Пользовательские спецификаторы формата TimeSpanне включать разделитель разделителей символы, такие как символы, которые отдельные дни от часов, часов от минуты или секунды от дробного секунд. Вместо этого эти символы должны быть включенным в пользовательский формат string как строковые литералы.

Ответ 3

По какой-то загадочной причине TimeSpan никогда не получал перегрузки ToString(), поддерживающие форматирование до .NET 4.0. Для более ранних выпусков, если это положительно, вы можете захватить DateTime.ToString():

        TimeSpan ts = new TimeSpan(0, 2, 8);
        string s = new DateTime(ts.Ticks).ToString("mm:ss");

Ответ 4

Пользовательское форматирование System.TimeSpan было добавлено в .Net 4, поэтому теперь вы можете сделать следующее:

string.Format("{0:mm\\:ss}", myTimeSpan);

(UPDATE), и вот пример использования интерполяции строк С# 6:

$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15

Короче вам теперь нужно избежать символа ":" с помощью "\" (который сам по себе должен быть экранирован, если вы не используете стенографическую строку).

В этой выдержке из страницы MSDN Custom TimeSpan Format Strings объясняется, что вы избегаете ":" и ".". charecters в строке формата:

Пользовательские спецификации формата TimeSpan не включают символы разделителя заполнителей, такие как символы, которые отделяют дни от часов, часов от минут или секунд от дробных секунд. Вместо этого эти символы должны быть включены в строку пользовательского формата в виде строковых литералов. Например, "dd.hh: mm" определяет период (.) Как разделитель между днями и часами и двоеточие (:) как разделитель между часами и минутами.

Ответ 5

Строки формата даты и времени применяются только к DateTime и DateTimeOffset. Yo может использовать строку нормального формата, однако:

string.Format("{0}:{1:00}", Math.Truncate(duration.TotalMinutes), duration.Seconds)

Обратите внимание, что использование TotalMinutes здесь гарантирует, что результат будет по-прежнему правильным, когда потребуется больше 60 минут.

Ответ 6

Попробуйте следующее:

DateTime startTime = DateTime.Now;
// Do Stuff
TimeSpan duration = DateTime.Now.Subtract(startTime);

Console.WriteLine("[paragraph of information] Total Duration: " + duration.Minutes.ToString("00") + ":" + duration.Seconds.ToString("00"));

Ответ 7

вы всегда можете:

string.Format("{0}:{1}", duration.Minutes, duration.Seconds);

Ответ 8

На основе этой страницы MSDN, описывающей метод ToString для TimeSpan, я несколько удивлен, что вы даже можете скомпилировать код выше. TimeSpan не имеет перегрузки ToString(), которая принимает только одну строку.

В статье также показана функция, которую вы можете использовать и использовать для форматирования TimeSpan.

Ответ 9

TimeSpan t = TimeSpan.Parse("13:45:43");
Console.WriteLine(@"Timespan is {0}", String.Format(@"{0:yy\:MM\:dd\:hh\:mm\:ss}", t));

Ответ 10

Вы можете использовать приведенный ниже код.

TimeSpan tSpan = TimeSpan.FromSeconds(allTotalInMinutes);
string tTime = string.Format("{1:D2}:{2:D2}", tSpan.Minutes, tSpan.Seconds);

Он отобразит формат 34:45.

Надеюсь, это поможет вам.