Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для Kovy
7 / 7 / 2
Регистрация: 29.04.2009
Сообщений: 411

TimeSpan выдает исключение OverflowException при попытке распарсить строку на дату

06.12.2011, 08:45. Показов 2817. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Выдает исключение OverflowException при попытке распарсить строку на дату.
Входные данные:
C#
1
2
stat[w][z]="25:49";
buf[q][z]="25:49";
C#
1
2
TimeSpan dt=new TimeSpan();
dt = TimeSpan.Parse(stat[w][z]) + TimeSpan.Parse(buf[q][z]);
Ошибка: Невозможен синтаксический разбор TimeSpan, поскольку по крайней мере один из числовых компонентов находится за пределами допустимого диапазона или содержит слишком много цифр.

подскажите в чем проблема и какой выход?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.12.2011, 08:45
Ответы с готовыми решениями:

Исключение "индекс находился вне границ массива" при попытке проверить строку string
Помогите, пожалуйста. Проблема возникает во всех случаях (строки 21, 25, 34, 36 и 38). string Strings =...

Почему не возникает исключение OverflowException?
Есть такой код: //max - 2147483647 int a = 2000000000; int b = 2000000000; int c = 0; try {

Распарсить строку и записать дату рождения в три целочисленные переменные - отдельно день, месяц и год
Столкнулся с такой проблемой, дана строка(дата рождения, числа разделены двоеточиями ) ,из нее нужно записать все в переменные день месяц...

6
84 / 84 / 10
Регистрация: 20.05.2011
Сообщений: 145
06.12.2011, 10:30
А 25:49 это что за время? Минуты и секунды? Если да то попробуй передать 00:25:49

Добавлено через 1 минуту
Просто метод Parse считает что 25 это часы а в сутках 24 часа вот он и вопит что значение выше диапазона.
0
 Аватар для Kovy
7 / 7 / 2
Регистрация: 29.04.2009
Сообщений: 411
06.12.2011, 11:23  [ТС]
Цитата Сообщение от SpiritRI Посмотреть сообщение
А 25:49 это что за время? Минуты и секунды? Если да то попробуй передать 00:25:49

Добавлено через 1 минуту
Просто метод Parse считает что 25 это часы а в сутках 24 часа вот он и вопит что значение выше диапазона.
попробовал написать так:
C#
1
 dt = TimeSpan.Parse("00:" + stat[w][z]) + TimeSpan.Parse("00:" + buf[q][z]);
результат тот же.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.12.2011, 11:58
Как сказали выше, парсинг фейлится из-за того, что количество часов превышает 23. В этом случае придется вручную разбивать строку на элементы, парсить их в целые и создавать новый объект (конструктор TimeSpan принимает количество часов и выше 23).

Например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TimeSpan Parse(string time)
{
   if (string.IsNullOrEmpty(time)) throw new ArgumentException("Input is null or empty");
   TimeSpan result;
   if (!TimeSpan.TryParseExact(time, "h\\:mm", CultureInfo.InvariantCulture, out result))
   {
      var components = time.Split(':');
      if (components.Length != 2) throw new FormatException("Invalid format");
 
      int hh = int.Parse(time[0]);
      int mm = int.Parse(time[1]);
      result = new TimeSpan(hh, mm, 0);
   }
   return result;
}
1
 Аватар для Kovy
7 / 7 / 2
Регистрация: 29.04.2009
Сообщений: 411
06.12.2011, 12:18  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Как сказали выше, парсинг фейлится из-за того, что количество часов превышает 23. В этом случае придется вручную разбивать строку на элементы, парсить их в целые и создавать новый объект (конструктор TimeSpan принимает количество часов и выше 23).

Например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TimeSpan Parse(string time)
{
   if (string.IsNullOrEmpty(time)) throw new ArgumentException("Input is null or empty");
   TimeSpan result;
   if (!TimeSpan.TryParseExact(time, "h\\:mm", CultureInfo.InvariantCulture, out result))
   {
      var components = time.Split(':');
      if (components.Length != 2) throw new FormatException("Invalid format");
 
      int hh = int.Parse(time[0]);
      int mm = int.Parse(time[1]);
      result = new TimeSpan(hh, mm, 0);
   }
   return result;
}
спасибо. но тут еще вот что: stat, как видно из кода имеет тенденцию накапливать данные. И следовательно при сложении времени, рано или поздно там помимо минут и секунд появятся еще и часы. Будет ли корректно в таком случае работать, когда в stat уже hh:mm:ss, а в buf mm:ss
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.12.2011, 13:01
Цитата Сообщение от Kovy Посмотреть сообщение
как видно из кода
Эмм... из какого именно кода?

Цитата Сообщение от Kovy Посмотреть сообщение
Будет ли корректно в таком случае работать, когда в stat уже hh:mm:ss, а в buf mm:ss
Нет, не будет, придется добавить еще проверок.
1
 Аватар для Kovy
7 / 7 / 2
Регистрация: 29.04.2009
Сообщений: 411
06.12.2011, 16:41  [ТС]
Цитата Сообщение от 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
27
28
for (int c = 0; c < buf[j].Length&&fl==0; c++)
                        {
                            if (j == ind[a, 1])                 // если данные уже встречались, то складываем их
                            {
                                int w=ind [a,0];
                                int q=ind [a,1];
                                for (int z = 3; z < buf[j].Length - 1; z++)
                                {
                                    int nol = 0;
                                    if (stat[w][z] == "-" ) stat[w][z] = nol.ToString(); // если данные равны "тире" то присваеваем им 0
                                    if (buf[q][z] == "-") buf[q][z] = nol.ToString();
                                    if (z==3) 
                                    {
                                        TimeSpan dt=new TimeSpan();
                                        dt = TimeSpan.Parse(stat[w][z]) + TimeSpan.Parse(buf[q][z]);
                                        stat[w][z] = dt.ToString();
                                        break;
                                    }
                                    stat[w][z] = (Convert.ToInt32(stat[w][z]) + Convert.ToInt32(buf[q][z])).ToString();// складываем данные                          
                                }  
                                a++;
                                fl = 1;
                            }
                            else
                            {
                                stat[b][c] = buf[j][c]; // если данные новые, записываем в конец главного массива данных stat
                            }
                        }
Добавлено через 13 минут
Цитата Сообщение от kolorotur Посмотреть сообщение
Например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TimeSpan Parse(string time)
{
   if (string.IsNullOrEmpty(time)) throw new ArgumentException("Input is null or empty");
   TimeSpan result;
   if (!TimeSpan.TryParseExact(time, "h\\:mm", CultureInfo.InvariantCulture, out result))
   {
      var components = time.Split(':');
      if (components.Length != 2) throw new FormatException("Invalid format");
 
      int hh = int.Parse(time[0]);
      int mm = int.Parse(time[1]);
      result = new TimeSpan(hh, mm, 0);
   }
   return result;
}
Объясните пожалуйста некоторые моменты. В частности следующие строки:
C#
1
 if (!TimeSpan.TryParseExact(time, "h\\:mm", CultureInfo.InvariantCulture, out result))
C#
1
 var components = time.Split(':');
C#
1
 int hh = int.Parse(time[0]);
Добавлено через 21 минуту
Вот сделал такую функцию. Однако в ней исключение выбрасывается всегда, если отсутствуют часы. А без "else" пишет ошибку, мол возвращается значение result, которому не присвоено значение. Как обойти этот угол с "else"?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        static TimeSpan Parse(string time)
        {
            TimeSpan result;
            var components = time.Split(':');
            if (components.Length == 2)
            {
                int mm = Convert.ToInt32(components[0]);
                int ss = Convert.ToInt32(components[1]);
                result = new TimeSpan(0, mm, ss);
            }
            if (components.Length == 3)
            {
                int hh = Convert.ToInt32(components[0]);
                int mm = Convert.ToInt32(components[1]);
                int ss = Convert.ToInt32(components[2]);
                result = new TimeSpan(hh, mm, ss);
            }
            //else throw new FormatException("Invalid format!");
            return result;           
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2011, 16:41
Помогаю со студенческими работами здесь

Исключение System.OverflowException если запускаю из Visual Studio
Здравствуйте, тут такое дело, подключил либу AForge.Video.VFW для записи видео. Компилирую, нажимаю &quot;Запись&quot;, выдает...

Исключение при попытке вывести изображение
У меня выдает исключение на эту строку My_img.SetValue(Image.SourceProperty,...

Выбрасывается исключение при попытке подключения к БД
При запуске кода выдает исключение, classpath настроил. Не знаю, что делать. В чем может быть проблема? import java.sql.*; import...

Сокеты. Исключение при попытке переподключения
Всем доброго времени суток! Столкнулся с проблемой в осваивании сокетов. Необходимо написать простое клиент-серверное приложение,...

Исключение при попытке вызвать QFileDialog::getOpenFileName
Доброго времени суток. При попытке выбора файла с помощью QFileDialog::getOpenFileName Получаю исключение: Вызвано исключение по...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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