var span = System.TimeSpan.FromMinutes(121);
var hours = ((int)span.TotalHours).ToString();
var minutes = span.Minutes.ToString();
ToString (), потому что вы запросили строковые значения ...
TotalHours - это полные часы в TimeSpan, они могут быть больше 24 (тогда как поле «Hours» имеет максимум 24)
Да, и подумал: зачем использовать TimeSpan, а не вычислять его самостоятельно? Поскольку TimeSpan уже отлажен и протестирован Microsoft, он имеет хороший чистый интерфейс (глядя на код, вы легко видите, что происходит, без необходимости мысленно выполнять вычисления) и легко распространяется на дальнейшие решения. (Вводить в секундах? Использовать TimeSpan.FromSeconds (). Хотите дней? Использовать span.TotalDays ...)
Обновление:
Я только что заметил ошибку в своем ответе: TotalHours возвращает дробное значение всех часов, поэтому мы должны усечь его до целого числа, прежде чем преобразовать его в строку.