Ошибка при конвертации строки в дату 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 комментария

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

Роман @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 Куратор тега 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. Ѫ