System formatexception строка не распознана как действительное значение datetime
Перейти к содержимому

System formatexception строка не распознана как действительное значение datetime

  • автор:

Ошибка при конвертации строки в дату C#

В отладчике смотрел — действительно, приходит string «01.03.2021». Если же в коде указать конкретную дату «01.03.2021», то работает без ошибок:

DateTime dt = DateTime.ParseExact("01.03.2021", "dd.MM.yyyy", System.Globalization.CultureInfo.InvariantCulture); 

введите сюда описание изображения

Помогите решить проблему. Спасибо. Специально, для тех, кто не верит — принтскрин отладчика:

Как выпарсить дату C#?

Получаю ошибку — Строка не распознана как действительное значение DateTime.

  • Вопрос задан более трёх лет назад
  • 1030 просмотров

2 комментария

Простой 2 комментария

twobomb

Ну наверное потому-что у вас HH, а в строке 5, а не 05

yarosroman

Роман @yarosroman Куратор тега C#

twobomb, оформите отдельным ответом и решением дополните, чтобы засчитать его вам

Решения вопроса 0

Ответы на вопрос 2

estry @estry Автор вопроса

Решил вот так

string date = "03.09.2020 5:00:00"; DateTime dt; if (DateTime.TryParse(date, DateTimeFormatInfo.CurrentInfo, DateTimeStyles.None, out dt))

Ответ написан более трёх лет назад

Комментировать

Нравится 1 Комментировать

vabka

Василий Банников @vabka Куратор тега C#

Токсичный шарпист

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

var date = "03.09.2020 5:00:00"; var format = "dd.MM.yyyy H:mm:ss"; var dt = DateTime.ParseExact(date, format, CultureInfo.InvariantCulture); dt.Dump();

Ещё лучше вариант — делать TryParse

var date = "03.09.2020 5:00:00"; const string format = "dd.MM.yyyy H:mm:ss"; if (DateTime.TryParseExact(date, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out var dt) )

Ответ написан более трёх лет назад

Комментировать

Нравится Комментировать

Почему возникает исключение ParseExact?

Добрый день.
Все дело в том, что при парсинге месяца в формате MMM он определяется в соответствии с AbbreviatedMonthNames.
Это значение определяется текущим набором региональных параметров вашей ОС, посмотреть его можно следующей командой:
(Get-Culture).DateTimeFormat.AbbreviatedMonthNames
В вашем случае лучше использовать

$dateString = '14-nov-22' $date = [datetime]::Parse($dateString)

Для автоматического определения месяца и парсинга.
Или

$dateString = '14-nov-22' $date = $dateString | Get-Date -format "dd-MM-yyyy"

System formatexception строка не распознана как действительное значение datetime

Сообщения: 6494
Благодарности: 1466

Конфигурация компьютера
Процессор: Intel Core i5-8259U @ 2.30GHz
Материнская плата: Intel NUC8BEB
Память: Patriot 2400 C15 Series DDR4-2400, 32 GB
HDD: Samsung SSD 970 EVO Plus 500 GB, M.2
Видеокарта: Intel Iris Plus Graphics 655
Звук: Behringer UCA222 + M-Audio Studiophile AV 40
Монитор: BenQ G900 (19″ LCD, 5:4)
ОС: Windows 11 Pro x64

Помогите, пожалуйста, перевести строку

Dec 23 19:03:15 2022 GMT

в datetime с конвертацией GMT в MSK.

Что-то не пойму, как это сделать, а сам PS эту конструкцию не распознаёт.

Пробовал что-то вроде (даже без GMT)

$expdate = "Dec 23 19:03:15 2022" [datetime]::ParseExact("$expdate", "MMM dd HH:mm:ss yyyy", $null) Исключение при вызове "ParseExact" с "3" аргументами: "Строка не распознана как действительное значение DateTime." строка:1 знак:1 + [datetime]::ParseExact("$expdate", "MMM dd HH:mm:ss yyyy", $null) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : FormatException

Проблема ещё, наверное, и в русской винде, потому что

get-date -f "MMM dd HH:mm:ss yyyy" окт 20 17:56:20 2022

Сообщения: 1754
Благодарности: 965

Цитата DJ Mogarych:

Устаревший класс не для PS, я для .NET. »
PS C:\> [Net.HttpWebRequest] | fl FullName, AssemblyQualifiedName FullName : System.Net.HttpWebRequest AssemblyQualifiedName : System.Net.HttpWebRequest, System.Net.Requests, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Сообщения: 6494
Благодарности: 1466

Конфигурация компьютера
Процессор: Intel Core i5-8259U @ 2.30GHz
Материнская плата: Intel NUC8BEB
Память: Patriot 2400 C15 Series DDR4-2400, 32 GB
HDD: Samsung SSD 970 EVO Plus 500 GB, M.2
Видеокарта: Intel Iris Plus Graphics 655
Звук: Behringer UCA222 + M-Audio Studiophile AV 40
Монитор: BenQ G900 (19″ LCD, 5:4)
ОС: Windows 11 Pro x64

А вот и та же проблема, с которой я столкнулся: Unable to download HTTPs Certificates, там дают ссылку на обсуждение выше.

Последний раз редактировалось DJ Mogarych, 21-10-2022 в 14:38 .

Сообщения: 1171
Благодарности: 487

Цитата DJ Mogarych:

проверьте kubernetes.io »

Цитата DJ Mogarych:

Устаревший класс не для PS, я для .NET. »

Всё верно (только уточнение: для .Net Core). но поскольку powershell 5.1 статичен и совсем не лезет в .Net Core, он ведь и сам давно устарел.
Тем не менее, он предустановлен по умолчанию и его функции можно использовать изкаропки

Цитата DJ Mogarych:

А вот и та же проблема, с которой я столкнулся »

Да, понятно, что она есть и существует.
Кстати, там речь о PS 7.0.2, но и в 7.2.6 всё то же самое. то бишь устаревшие классы чинить не собираются, если и работают через пень колоду, то это совершенно случайно.
А как по мне, то правильнее было бы: устарел класс — выпилить его нафик, чтобы и духу его не было — кому надо, переписывайте свой код. А то получается какая-то солянка из трухлявых мухоморов или просто свалка мусорного кода и чтобы обнаружить, что какой-то класс вдруг устарел (он ведь работал ранее и сейчас как-то работает, хоть и неправильно), надо листать документацию, которая написана, мягко говоря, не очень доходчиво. Судите сами:

Что это? Рекомендация не использовать и только. для устаревшего класса, как-то невнятно прожевали и выплюнули, имхо. Конкретнее необходимо указывать в самом начале, мол класс устарел, оставлен для совместимости с уже написанным кодом, рекомендуется использовать вместо него то-то и то-то . так было бы понятнее.

——-
scio me nihil scire. Ѫ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *