В моем сетевом базовом проекте мне нужно проанализировать строку в DateTime. Формат динамический и не известен во время компиляции. Код:
var datetime = DateTime.ParseExact(data, format, CultureInfo.InvariantCulture, DateTimeStyles.None);
но у меня возникают проблемы, когда формат - это просто час, и он приходит в виде чисел от 0 до 23. Согласно этой статье для указания формата часа у вас есть 4 варианта: h , чч , Ч и ЧЧ , но при попытке анализа "0"
Используя ч Я получаю:
System.FormatException: входная строка была в неправильном формате.
Используя чч Я получаю:
System.FormatException: строка не была распознана как допустимый DateTime.
Используя H Я получаю:
System.FormatException: входная строка была в неправильном формате.
Используя ЧЧ Я получаю:
System.FormatException: строка не была распознана как допустимый DateTime.
В этой статье говорится, что
Если формат является шаблоном нестандартного формата, который не включает дату или
разделители времени (такие как «ггггММДЧЧмм»), используйте инвариантную культуру
для параметра провайдера и самой широкой формы каждого пользовательского формата
спецификатор. Например, если вы хотите указать часы в формате
шаблон, укажите более широкую форму, "HH", вместо более узкой формы,
"H".
но это то, что я делал и не работал. Я не могу догадаться, как добиться анализа строки, которая занимает всего час в DateTime. Есть идеи ??
EDIT
Исключение выдается при выполнении любой из следующих строк:
DateTime.ParseExact("0", "HH", CultureInfo.InvariantCulture, DateTimeStyles.None);
DateTime.ParseExact("0", "H", CultureInfo.InvariantCulture, DateTimeStyles.None);
Я не могу использовать TimeSpan.Parse, поскольку у меня есть универсальное решение для чтения файлов xlsx . Как читать файл хранится в базе данных. Иногда DateTime все в одном столбце, и формат ddMMyyHHmmss
, а другие DateTime в одном столбце с форматом ddMMyy
и час в другом как число от 0 до 23 (минуты и секунды должны быть инициализированы с 0 ). Позже дата и час объединяются, чтобы вернуть весь DateTime.