Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
1 / 1 / 0
Регистрация: 25.11.2015
Сообщений: 26

Сложение времени

04.04.2018, 17:36. Показов 4676. Ответов 9

Студворк — интернет-сервис помощи студентам
Добрый день! такая проблема, есть набор чисел которые выглядят как время (mm.ss) мне нужно их сложить.
Пытаюсь сделать так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
double[] vetka = { 2, 4, 3, 2, 2, 2, 01.30, 01.50, 1.40, 1.40, 1.30, 2.10, 2.10, 1.40, 2.40, 3.20, 2.50, 2.30, 3.20, 3, 2.20 }; //набор чисел в формате минуты или минуты.секунды
            string t2 = "00.00"; //вводим переменную t2 и задаем стартовый отсчет.
            try//исключения
            {
                foreach (double s in vetka) //проверяем каждое число
                {
                        DateTime t3 = DateTime.ParseExact(t2.ToString(), "mm.ss", null); // вводим переменную t3 как время
                        if (s.ToString().Contains(".")) //если число содержит "." то выполняем следующее:
                        {
                            Boolean k = true;
                            string[] dtimes = s.ToString().Split(new char[] { '.' });
                            foreach (string n in dtimes) // разделяем по знаку "."
                            {
                                if (k) {
                                           t3 = t3.AddMinutes(Convert.ToInt32(n)); //прибавляем к t3 минуты
                                           k=false;
                                         } 
                                          else     t3 = t3.AddSeconds(Convert.ToInt32(n)); //прибавляем к t3 секунды
                            }
                            t2 = t3.ToString("mm.ss");//изменяем переменную 2 на время с добавленным числом
                        }
                        else //если число целое, то просто добавляем минуты.
                        {
                            t3 = t3.AddMinutes(s);
                            t2 = t3.ToString("mm.ss");
                        }
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            tb1.Text = t2.ToString();//выводим результат в textbox
        }
И после этого у меня получается результат такой что там где у меня число 1.3, оно конвертируется во время 1.18. Мне нужно чтобы оно так же оставалось double 1.3 = времени 1 минута 30 секунд.
Часов 6 уже мучаюсь) Помогите))))))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2018, 17:36
Ответы с готовыми решениями:

Определить, сколько будет времени через заданный интервал времени
Текущее показание электронных часов: m часов, n минут и k секунд. Какое время будут показывать часы через p ч q мин и r c? Помогите,...

Вывести текстовый файл с данными разницы текущего времени и времени изменения файла
Уважаемые программисты, не подскажете как вывести текстовый файл на рабочий стол с данными разницы текущего времени и времени изменения...

Класс для представления времени, предусмотреть возможности установки времени и изменения его отдельных полей
Составить описание класса для представления времени. Предусмотреть возможности установки времени и изменения его отдельных полей (час,...

9
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
04.04.2018, 18:05
Лучший ответ Сообщение было отмечено BelialAlex как решение

Решение

Цитата Сообщение от BelialAlex Посмотреть сообщение
есть набор чисел которые выглядят как время (mm.ss) мне нужно их сложить.
C#
1
2
3
4
5
6
7
8
9
double[] vetka = { 2, 4, 3, 2, 2, 2, 01.30, 01.50, 1.40, 1.40, 1.30, 2.10, 2.10, 1.40, 2.40, 3.20, 2.50, 2.30, 3.20, 3, 2.20 };
var total = TimeSpan.Zero;
foreach (var num in vetka)
{
    var minutes = Math.Truncate(num);
    var seconds = 100 * (num % 1);
    total += TimeSpan.FromSeconds(minutes * 60 + seconds);
}
tb1.Text = total.ToString();
1
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
04.04.2018, 18:07
Лучший ответ Сообщение было отмечено BelialAlex как решение

Решение

ужс...
C#
1
2
3
4
5
var totalSec = new[] { 1.3, 1.5 }
            .Select(x => Convert.ToInt32(Math.Truncate(x) * 60 + (x - Math.Truncate(x)) * 100))
            .Sum();
 
            var result = $"{ totalSec / 60 } min { totalSec % 60 } sec";
p.s.
для компилятора, что 01.20, что 1.2 -- одно и тоже.
1
1 / 1 / 0
Регистрация: 25.11.2015
Сообщений: 26
04.04.2018, 20:03  [ТС]
Спасибо большое! Завтра попробую)
Свои костыли нагородил)

Цитата Сообщение от Wolfdp Посмотреть сообщение
.p.s.
для компилятора, что 01.20, что 1.2 -- одно и тоже.
Это вырезано из контекста) данные берутся из файла, они там так и прописаны)))
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
04.04.2018, 20:17
Цитата Сообщение от BelialAlex Посмотреть сообщение
данные берутся из файла
Если файл текстовый, то весь сыр-бор с конвертацией можно опустить и сразу парсить в TimeSpan.
1
1 / 1 / 0
Регистрация: 25.11.2015
Сообщений: 26
05.04.2018, 09:36  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
double[] vetka = { 2, 4, 3, 2, 2, 2, 01.30, 01.50, 1.40, 1.40, 1.30, 2.10, 2.10, 1.40, 2.40, 3.20, 2.50, 2.30, 3.20, 3, 2.20 };
var total = TimeSpan.Zero;
foreach (var num in vetka)
{
    var minutes = Math.Truncate(num);
    var seconds = 100 * (num % 1);
    total += TimeSpan.FromSeconds(minutes * 60 + seconds);
}
tb1.Text = total.ToString();
kolorotur, отлично работает!)) только я не могу додумать как рассчитывается секунды "var seconds = 100 * (num % 1);"?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
05.04.2018, 09:48
BelialAlex, num % 1 отбрасывает целую часть, оставляя только десятичную: 3.14 % 1 == 0.14, потом эта десятичная часть умножается на сотню (секунд больше 59-и быть не должно, если предполагать верность входящих данных) и получается целое число, равное количеству секунд.
Но опять же: если значения находятся в файле в виде текста, то весь этот процесс можно выбросить и сразу парсить в TimeSpan.
1
1 / 1 / 0
Регистрация: 25.11.2015
Сообщений: 26
05.04.2018, 11:14  [ТС]
kolorotur, Получилось так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
               StreamReader sr = new StreamReader(@"test.txt"); //читаем текстовый файл
                string text = sr.ReadToEnd();
                sr.Close();
 
                string[] vetka = text.Split(','); // разделяем по запятой
                double k; //объявляем переменную для double
                var total = TimeSpan.Zero; //объявляем нулевое время
 
                foreach (var num in vetka) 
                {
                    k = double.Parse(num, System.Globalization.CultureInfo.InvariantCulture);
 
                    if (l1 == l2) //если числа из 2 полей одинаковые
                    {
                        break;
                    }
 
                    if (i >= l1 & i < l2) //сложение времени между выбранными индексами.
                    {
                        var minutes = Math.Truncate(k);
                        var seconds = 100 * (k % 1);
                        total += TimeSpan.FromSeconds(minutes * 60 + seconds);
                    }
                    i++;
                }
            tb1.Text = total.ToString(); //вывод в textbox
PS. Спасибо за советы)))
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
05.04.2018, 12:35
Цитата Сообщение от BelialAlex Посмотреть сообщение
C#
1
2
3
StreamReader sr = new StreamReader(@"test.txt"); //читаем текстовый файл
string text = sr.ReadToEnd();
sr.Close()
;
Можно заменить на
C#
1
var text = File.ReadAllText(@"test.txt");
И вообще -- при использовании обьекта Stream в одной области, правильнее оборачивать его в using
C#
1
2
3
4
5
string text;
using(var sr = new StreamReader(@"test.txt"))
{
text = sr.ReadToEnd();
}
Цитата Сообщение от BelialAlex Посмотреть сообщение
if (l1 == l2)
имеет смысл вынести вообще в самый верх, т.к. в случае истины не имеет смысла даже лезть в файл.

Цитата Сообщение от BelialAlex Посмотреть сообщение
if (i >= l1 & i < l2)
Учитывая, что кастите в массив, можно сразу проходить отрезок (опционально проверять невыход за массив)
C#
1
2
3
4
5
6
7
for(var i = l1; i < l2 && i < vetka.Length; i++)
{
   var num = vetka[i];
   var minutes = Math.Truncate(k);
   var seconds = 100 * (k % 1);
   total += TimeSpan.FromSeconds(minutes * 60 + seconds);
}
1
1 / 1 / 0
Регистрация: 25.11.2015
Сообщений: 26
05.04.2018, 13:40  [ТС]
Wolfdp, kolorotur, Спасибо! Очень помогли!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2018, 13:40
Помогаю со студенческими работами здесь

Сложение времени
Интересует сложение времени. Пример. Есть время начала разговора, количество минут разговора. Нужно добавить столбец в котором будут...

Сложение времени
Добрый вечер, я уже измучилась, подскажите кто нибудь дельно, как суммировать часы? есть услуга, её предоставляет сотрудник,...

Сложение времени
Доброго времени суток! Нужен JavaScript, который складывает время( часы, минуты и секунды) в одно общее. допустим есть 3 поля ввода...

сложение времени
помогите, нужно чтобы например в первой строке от 7:30 (с1, с2, d1, d2 и т.д) прибавлялось по 50 минут

Сложение времени
Имеется вывод времени из секунд DECLARE @T1 INT=1329722; DECLARE @T2 INT=5698536; SELECT ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru