Как конвертировать строку из парсера в число C#

108
17 февраля 2019, 15:40

Вопрос 1: Через парсер получаем строку "10д 5ч". (10 дней и 5 часов) Надо ее конвертировать и получить время в часах (10*24+5) и получить число 245. Пока что идея сделать через if и замену буквы на число, но это похоже на костыль, а не решение.

Вопрос 2: Число (int) надо конвертировать в дни и часы и вывести через TextView

Что подскажете?

Answer 1

За время в C# отвечает TimeSpan и с ним вам стоит работать.

Считываем значение:

У таких объектов, как TimeSpan и DateTime (а также их аналоги) есть два метода (Parse и ParseExact), которые как раз и отвечают за "чтение" времени из String. Parse будет полезен тогда, когда время идет в стандартном формате (по типу hh:mm:ss). ParseExact в этом плане более гибкий и позволяет настраивать формат "парса" времени.

Воспользуемся ParseExact:

var time = TimeSpan.ParseExact("10д 5ч", "d'д 'h'ч'", null);

Здесь мы разбили входные данные, отделив обычный текст от значений самого времени. Сами же значения заменяем на нужный нам формат. Также метод требует культуру, тут уже сами думайте, нужна она вам или нет...

Получаем необходимые данные:

получить время в часах (10*24+5) и получить число 245

При использование нужного типа данных мы с легкостью можем оперировать этими данными так, как заходим. В данном случае все, что вам нужно, это узнать значение свойства TotalHours:

var totalHours = time.TotalHours;

Обратная конвертация:

Число (int) надо конвертировать в дни и часы

Для этого есть такие методы как FromHours(). Принимают они double значение и отдают TimeSpan:

var result = TimeSpan.FromHours(totalHours);

Ну а как выводить, это уже смотрите сами. Обычно используется .ToString(); который может также принимать настраиваемый формат, так что просто поиграйтесь с этим и думаю поймете.

В общем удачи в изучении C#!

READ ALSO
Ввод без перехода на следующую строку C#

Ввод без перехода на следующую строку C#

Я хочу сделать, чтоб при вводе данных в C# не выполнялся переход на новую строку в консоли, это возможно? Например, чтоб консоль выглядела не так:

155
Как программно в dataGridView сделать поле ComboBox?

Как программно в dataGridView сделать поле ComboBox?

Как программно в dataGridView сделать поле ComboBox?

175
Необработанное исключение типа “System.InvalidOperationException” в EntityFramework.dll

Необработанное исключение типа “System.InvalidOperationException” в EntityFramework.dll

пишу приложение WPF с веб сервисом wfc, в веб сервесе модель базы данных entity framework, когда пытаюсь передать запрос из клиента на добавление записи...

124
XamlParseException. Ошибка в коде

XamlParseException. Ошибка в коде

Скажите как исправить ошибку

179