NorouziFar Ответов: 1

Cultureinfo и error = "string was not recognized as a valid datetime" между windows 10 и windows 7


Я запускаю этот код в windows 10 и Visual studio 2017, и он работает правильно, но когда я запускаю этот код в windows 7 и Visual Studio 2015 Update 3, я получаю ошибку :

"Строка не была распознана как допустимая Дата-Время" .... в этой строке
DateTime dt = DateTime.Parse(s, Thread.CurrentThread.CurrentCulture.DateTimeFormat);


Как я могу это решить :????

мой код:
CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("fa-IR");
string s = "1396/02/31";
DateTime dt = DateTime.Parse(s, Thread.CurrentThread.CurrentCulture.DateTimeFormat);
Console.WriteLine(dt.ToShortDateString());
Thread.CurrentThread.CurrentCulture = originalCulture;
Console.ReadKey();
//error=String was not recognized as a valid DateTime.


Что я уже пробовал:

эту ссылку я нахожу
https://msdn.microsoft.com/en-us/library/bb762911(v=против 110). aspx

1 Ответов

Рейтинг:
2

Jochen Arndt

Windows 10 добавила поддержку календаря Jalali.
В результате Класс DateTimeFormatInfo (System.Глобализация)[^] класс должен возвращать разные строки формата даты для "fa-Ir" при вызове в Windows 10 и более старых версиях (здесь его нельзя проверить).

Сначала вы должны заметить, что ваша строка даты-это Джалали. DateTime объекты используют григорианский календарь.

Чтобы получить Григорианскую дату из даты Джалали используйте ToDateTime способ проведения Класс PersianCalendar (Система.Глобализация)[^].

Но перед этим преобразованием вы должны разобрать строку. Первый подход, который приходит на ум, - это использование DateTime.Parse с фиксированным форматом "гггг/ММ/ДД". Но это не удастся для конкретных дат. Таким образом, вы должны разделить строку на год, месяц и день.

Непроверенный пример без проверки ошибок синтаксического анализа:

String[] dateParts = s.Split('/');
int year = int.Parse(dateParts[0]);
int month = int.Parse(dateParts[1]);
int day = int.Parse(dateParts[2]);
PersianCalendar pc = new PersianCalendar();
DateTime dt = pc.ToDateTime(year, month, day, 0, 0, 0, 0);


NorouziFar

Я не хочу конвертировать его из Джалали в Григорианский я хочу просто изменить тип данных с syring на datetime

ваш код преобразовал его в Григорианский

Jochen Arndt

Тип C# DateTime может представлять только григорианские даты. Вам нужен тип, который представляет даты Джалали. И это есть в моем примере: класс PersianCalendar. pc. ToDateTime () инициализирует дату и возвращает соответствующую Григорианскую дату. Если вы этого не хотите, игнорируйте возвращаемое значение. Используйте переменную pc, которая удерживает вашу дату Jalali.

NorouziFar

я сравниваю между окном 10 и windows 7 и нахожу, что в windows 7 у нас нет календаря Хиджры, если я найду способ добавить календарь хиджры в windows 7, моя проблема будет решена