Формат времени, показывающий общее количество прошедших минут - PullRequest
0 голосов
/ 06 марта 2019

Я хотел дать пользователю возможность выбрать формат отображения таймера.Форматы времени, которые пользователь может выбрать:

mm\:ss
mm\:ss\.f
mm\:ss\.ff
hh\:mm\:ss
hh\:mm\:ss\.f
hh\:mm\:ss\.ff

Затем в коде у меня есть интервал времени, который преобразуется в строку, например:

Return timespan.ToString(TimeFormat)

Дело в том, что если пользователь использует формат мм: ss, тогда показываются минуты, и когда они истекают 59 минут, они снова начинаются с нуля.Я хотел бы показать общее количество минут.Итак, 60 минут 43 секунды

1008 * Я прочитал всю документацию по MS, но не могу найти решение для этого.https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings

Ответы [ 3 ]

2 голосов
/ 06 марта 2019

Вы можете просто вернуть пользовательскую отформатированную строку.Как то так:

if (TimeFormat == "some format")
    return $"{timespan.TotalMinutes} minutes, {timespan.Seconds} seconds";
0 голосов
/ 07 марта 2019

По совету, который я получил из комментариев, и еще немного прибегая к помощи, я не нашел решения, очень похожего на фреймворк, поэтому я нашел грязную Select Case, которая работает как шарм.

Select Case objSettings.TimeFormat
    Case "m\:ss"
        Return String.Format("{0}:{1:00}", Math.Floor(time.TotalMinutes), time.Seconds)
    Case "m\:ss\.f"
        Return String.Format("{0}:{1}", Math.Floor(time.TotalMinutes), time.ToString("ss\.f"))
    Case "m\:ss\.ff"
        Return String.Format("{0}:{1}", Math.Floor(time.TotalMinutes), time.ToString("ss\.ff"))
    Case "mm\:ss"
        Return String.Format("{0:0#}:{1:00}", Math.Floor(time.TotalMinutes), time.Seconds)
    Case "mm\:ss\.f"
        Return String.Format("{0:0#}:{1:00}", Math.Floor(time.TotalMinutes), time.ToString("ss\.f"))
    Case "mm\:ss\.ff"
        Return String.Format("{0:0#}:{1:00}", Math.Floor(time.TotalMinutes), time.ToString("ss\.ff"))
    Case "hh\:mm\:ss"
        Return String.Format("{0:0#}:{1}", Math.Floor(time.TotalHours), time.ToString("mm\:ss"))
    Case "hh\:mm\:ss\.f"
        Return String.Format("{0:0#}:{1}", Math.Floor(time.TotalHours), time.ToString("mm\:ss\.f"))
    Case "hh\:mm\:ss\.ff"
        Return String.Format("{0:0#}:{1}", Math.Floor(time.TotalHours), time.ToString("mm\:ss\.ff"))
    Case Else
        Return time.ToString(objSettings.TimeFormat)
End Select
0 голосов
/ 06 марта 2019

Похоже, вам нужен формат 'g':

Этот спецификатор выводит только то, что нужно. Он чувствителен к культуре и принимает форму [-] [d ’:’] h ’:’ mm ’:’ ss [.FFFFFFF].

Подробности здесь

...