Неверный формат времени - PullRequest
0 голосов
/ 07 февраля 2010

В настоящее время я пытаюсь преобразовать определенное время (введено через текстовое поле). Введенное время будет выглядеть примерно как 01 52 22 мин с с. Мили с.

однако Timespan.parse (tbName.text) выдает мне неправильную ошибку формата.

У меня это работает, если я ввожу что-то вроде 46 в текстовое поле, но тогда для дней устанавливается значение 46, а не секунд.

Любые идеи, как получить это просто установить минуты и мили секунды от ввода текста, указанного выше?

Я почти уверен, что временной интервал - это путь, но во многих прочитанных мною сообщениях используется dateTime и только часть времени переменной используется при форматировании

Ответы [ 2 ]

1 голос
/ 07 февраля 2010

Спецификация для разбираемой строки:

[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]

, где ws - это пробел, d - дни от 0 до 10675199, а смысл остальных очевиден (если вы не знаете, как читать такую ​​спецификацию, элементы в квадратных скобках необязательны, и один элемент должен быть выбран из элементов внутри фигурных скобок 1 ). Таким образом, если вы хотите проанализировать "01 52 22" как TimeSpan с TimeSpan.Minutes == 1, TimeSpan.Seconds == 52 и TimeSpan.Milliseconds == 22, то вам нужно либо переформатировать ваш ввод в "00:01:52.22" и проанализировать

string s = "00: 01: 52.22"; TimeSpan t = TimeSpan.Parse (s);

или разбери строку сам так

string s = "01 52 22";
string[] fields = s.Split(' ');
int minutes = Int32.Parse(fields[0]);
int seconds = Int32.Parse(fields[1]);
int milliseconds = Int32.Parse(fields[2]);
TimeSpan t = new TimeSpan(0, 0, minutes, seconds, millseconds);

У меня это работает, если я ввожу что-то вроде 46 в текстовое поле, но тогда для дней устанавливается значение 46, а не секунд.

Таким образом, ссылаясь на вышеприведенную спецификацию, причина, по которой "46" анализируется как TimeSpan с TimeSpan.Days == 46, заключается в том, что при повторном рассмотрении спецификации

[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]

пробелов нет, нет -, пробелов нет, и мы смотрим на

d

или

[d.]hh:mm[:ss[.ff]]

и "46" явно соответствуют прежней спецификации и, таким образом, анализируют, как вы видели.

1 : сделайте себе одолжение и выучите регулярные выражения; Хотя приведенное выше не является регулярным выражением, его понимание поможет вам прочитать спецификации, подобные приведенным выше Я рекомендую Освоение регулярных выражений . Понимание формальной грамматики также помогает.

1 голос
/ 07 февраля 2010

Чудесные документы по MDSN, вы сначала смотрели туда?

http://msdn.microsoft.com/en-us/library/se73z7b9.aspx

...