Попытавшись вставить арабские строки даты в мой ответ я обнаружил, что персонажи иногда заказаны из-за проблемы RTL. В частности, DateTime
, отформатированный в формате d-MMMM-yyyy hh:mm:ss tt
, будет иметь начальную часть d-
, перемещенную до конца (влево), которая является именно тем, как отображается строка в вашем вопросе (например, справа налево: месяц, год, время, AM/PM спецификатор, а затем день, который кажется странным). Поэтому я предполагаю, что ваша строка действительно использует более естественный формат d-MMMM-yyyy hh:mm:ss tt
.
Проблема, с которой вы сталкиваетесь, заключается в том, что вам нужно использовать правильный календарь. Вы пытались использовать культуру ar-SA
, но календарь по умолчанию для этого - календарь Hirji. Вам нужно использовать григорианский календарь с правильными месячными именами. Чтобы изменить календарь, вам нужно создать новый CultureInfo
и выбрать правильный календарь. В вашем случае, кажется, что вы должны использовать «локализованный» календарь с индексом 5 OptionalCalendars
собственности:
var cultureInfo = CultureInfo.CreateSpecificCulture("ar-SA");
cultureInfo.DateTimeFormat.Calendar = cultureInfo.OptionalCalendars[5];
Вы можете разобрать вашу строку, используя этот код (где я создаю строку таким образом, что делает не изменить его, когда я вставить его в браузере):
var dateTimeString = new String(new[] {
'1',
'4',
'-',
'ي',
'و',
'ل',
'ي',
'و',
'-',
'2',
'0',
'1',
'5',
' ',
'0',
'4',
':',
'4',
'4',
':',
'5',
'1',
' ',
'م'
});
var dateTime = DateTime.Parse(dateTimeString, cultureInfo);
Полученный DateTime
является:
2015-07-14T16:44:51
Если вы хотите использовать DateTime.ParseExact
формат d-MMMM-yyyy hh:mm:ss tt
:
var dateTime = DateTime.ParseExact(dateTimeString, "d-MMMM-yyyy hh:mm:ss tt", cultureInfo);
Вы должны также рассмотреть возможность использования DateTime.TryParse
или DateTime.TryParseExact
для лучшего потока кода, если вы столкнулись с недопустимой отформатированной строкой.
нормально, так что вы хотите сказать, что это будет преобразовать его: DateTime.ParseExact (latestTables.Result.StaticTable [я] .dtUpdTime, "дд - MMM чч: мм: сс -yyyy т", CultureInfo.InvariantCulture) ; – Yawar
Нет его не преобразование по вышеуказанному коду – Yawar
Вы преобразовали текст перед запуском функции parseExact? – tichra