Как TryParseExact строку, содержащую только 24-часовой час? - PullRequest
5 голосов
/ 30 декабря 2011

Он просто не хочет работать:

DateTime time;

DateTime.TryParseExact("17", "HH", ..., out time);
  // works fine

DateTime.TryParseExact("9", "HH", ..., out time);
  // works fine, but 9 doesn't match HH (nor should it)

DateTime.TryParseExact("9:", "H':'", ..., out time);
  // works fine

DateTime.TryParseExact("9", "H", ..., out time);
  // exception: "Input string was not in a correct format"

Тот факт, что # 3 работает, предлагает очевидный обходной путь, но это одна из тех вещей, которые заставили бы меня пойти "WTF", если явидел это в чужом коде.TryParseExact глючит что ли?

Ответы [ 2 ]

8 голосов
/ 30 декабря 2011

Вы можете использовать DateTime.TryParseExact("5", "%H", null, DateTimeStyles.None, out time).

Для анализа часа по 24-часовым часам без нуля в начале можно испытать желание использовать только формат "H", но пользовательскую дату иформат времени должен состоять из двух или более символов, что приведет к интерпретации "H" как стандартного формата даты и времени , что приведет к исключению формата.

From MSDN для пользовательских строк формата даты и времени :

Чтобы использовать любой из пользовательских спецификаторов формата даты и времени в качестве единственного спецификатора в строке формата (то есть использовать "d "," f "," F "," g "," h "," H "," K "," m "," M "," s "," t "," y "," z ", ":" или "/" сам по себе спецификатор формата), включают пробел до или после спецификатора или включают спецификатор формата в процентах ("%") перед единственным указателем даты и времени.

Я предпочитаю включать знак % перед тем, как обнаружу, что пробел до или после может быть интерпретирован как ошибка ввода и может быть удален кем-то другим.

0 голосов
/ 30 декабря 2011

А как это использовать:

DateTime dt;
DateTime.TryParseExact("09", "HH", null, 
    System.Globalization.DateTimeStyles.None, out dt);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...