Я не уверен, что проблема у меня возникает из-за недостаточного понимания того, как работает дата в календаре Umm al-Qura, или если это ошибка.Арабская культура datetime parsing не возвращает ожидаемые значения
В основном я работаю над написанием теста, чтобы убедиться, что внутренний класс утилиты правильно анализирует значения независимо от текущей культуры.
В коде ниже, цель состоит в том, чтобы иметь dt1 равна dt2.
public void ArabicTesting()
{
CultureInfo culture = new CultureInfo("ar");
// Initialize a new datetime (04/01/2048 06:21:01 AM)
DateTime dt1 = new DateTime(2048, 4, 1, 6, 21, 1);
// Convert the datetime to a string using arabic cultureinfo
// string ends up being "17/06/70 06:21:01 ص,"
string dt2_string = $"{dt1.ToString(culture.DateTimeFormat.ShortDatePattern)} {dt1.ToString(culture.DateTimeFormat.LongTimePattern)}";
// Parse the string
DateTime dt2;
DateTime.TryParse(dt2_string, culture, DateTimeStyles.None, out dt2);
}
Проблема заключается в том, что DateTime.TryParse является разбор DateTime в виде строки в DateTime, который появляется то же самое, но имеет различные значения, чем то, что, как ожидается.
Вот несколько скриншотов из того, что происходит:
Если вы посмотрите на обоих dt1 и dt2 значений предварительного просмотра, они выглядят так же «17/06/70 06:21:01 ص ", однако, фактические значения объектов совершенно разные.
Кто-нибудь знает, является ли это ошибкой MS, или это потому, что я не передаю правильное строковое значение в метод DateTime.TryParse?
Что произойдет, если вы используете 'LongDatePattern' вместо' ShortDatePattern'? 'string dt2_string = $" {dt1.ToString (culture.DateTimeFormat.LongDatePattern)} {dt1.ToString (culture.DateTimeFormat.LongTimePattern)} ";' – Igor
@Igor, который действительно работал для этого сценария - спасибо. Меня все еще немного беспокоит, мне кажется, что проблема по умолчанию для метода ToString для DateTime возвращает одинаковые значения для разных дат. Нельзя ли использовать образец коротких дат в арабских культурах, если это может произойти? – user2338408