Преобразование строки в дату (месяц на русском)
Доброго времени суток!
Не удается преобразовать строку типа "12/дек/22" в дату (если месяц на русском). Пример кода:
using System.Globalization;
String enExample = "10/dec/22";
String ruExample = "10/дек/22";
DateTime result;
bool check;
var enCulture = CultureInfo.CreateSpecificCulture("en-US");
check = DateTime.TryParseExact(enExample, "dd/MMM/yy", enCulture, DateTimeStyles.None, out result);
Console.WriteLine(check);
Console.WriteLine(result.ToString("yy.MM.yyyy"));
var ruCulture = CultureInfo.CreateSpecificCulture("ru-RU");
check = DateTime.TryParseExact(ruExample, "dd/MMM/yy", ruCulture, DateTimeStyles.None, out result);
Console.WriteLine(check);
Console.WriteLine(result.ToString("yy.MM.yyyy"));
Вывод:
True
22.12.2022
False
01.01.0001
Ответы (1 шт):
Должно быть 10/дек./22, а не 10/дек/22, чтобы распозналось, после месяца точка ставится (кроме мая) - ГОСТ Р 7.0.12-2011.
static void Main(string[] args)
{
for (int i = 0; i < 12; i++)
Console.WriteLine(DateTime.Parse($"01.{i + 1}.2022").ToString(@"dd\/MMM\/yy"));
}
Вывод в консоль
01/янв./22
01/февр./22
01/мар./22
01/апр./22
01/мая/22
01/июн./22
01/июл./22
01/авг./22
01/сент./22
01/окт./22
01/нояб./22
01/дек./22
Обратите внимание, что если месяц используется без дней, то формат вывода месяца меняется - .ToString("MMM")
янв.
февр.
март
апр.
май
июнь
июль
авг.
сент.
окт.
нояб.
дек.
Это может означать, что при парсинге месяца .NET сможет распознать любой из этих двух вариантов написания.
То же самое для en-US
(.ToString(@"dd\/MMM\/yy", CultureInfo.GetCultureInfo("en-US")));)
01/Jan/22
01/Feb/22
01/Mar/22
01/Apr/22
01/May/22
01/Jun/22
01/Jul/22
01/Aug/22
01/Sep/22
01/Oct/22
01/Nov/22
01/Dec/22
Чтобы распарсить дату формата 10/дек/22, потребуется сначала ее привести к любому поддерживаемому стандарту.