Поскольку вы хотите, чтобы пользователь мог указать более 59 секунд (и / или минут), я не думаю, что TimeSpan.TryParseExact
сработает, поскольку вы не можете передать ему более 59
секунд или минут,Эти поля должны быть 0-59
.
. Однако вы можете написать собственный синтаксический анализатор, который разбивает входную строку на символ двоеточия (:
), а затем использует int.TryParse
, чтобы попытаться проанализировать результирующие части.в целые числа, а затем вы можете использовать TimeSpan.FromSeconds
, чтобы передать любое количество секунд для создания нового объекта TimeSpan
, и вы можете использовать метод .Add
, чтобы добавить другой промежуток времени, созданный из части минут, если она была указана.
Сначала мы можем написать метод, который будет возвращать TimeSpan
из строки в формате «[integer]» или «[integer]: [integer]»:
public static TimeSpan CustomParse(string input)
{
// Split the string on the ':' character
var parts = input?.Split(':');
// Make sure we have something to work with
if (parts == null || parts.Length == 0)
throw new FormatException("input format must be \"%m:%s\" or \"%s\"");
int seconds;
// Only a single number represents seconds
if (parts.Length == 1)
{
if (int.TryParse(parts[0], out seconds))
{
return TimeSpan.FromSeconds(seconds);
}
}
// Otherwise the first number is minutes and the second one is seconds
else
{
int minutes;
if (int.TryParse(parts[0], out minutes) &&
int.TryParse(parts[1], out seconds))
{
return TimeSpan.FromSeconds(seconds).Add(TimeSpan.FromMinutes(minutes));
}
}
// If we haven't returned anything yet, there was an error in the format
throw new FormatException("input format must be \"%m:%s\" or \"%s\"");
}
Затем мы можем написать другую функцию, которая принимает две строки, преобразует их в интервалы времени, используя наш метод выше, и возвращает результат сложения их вместе в виде строки:
public static string Add(string s1, string s2)
{
return CustomParse(s1).Add(CustomParse(s2)).ToString("%m\\:%s");
}
Теперь мы можем проверить это с помощью вашегоПримеры строк:
private static void Main()
{
string first = "1:30";
string second = "65";
string result = Add(first, second);
Console.WriteLine($"{first} + {second} = {result}");
GetKeyFromUser("\nDone! Press any key to exit...");
}
Выход
