2015-04-10 3 views
1

Я пытаюсь удалить скрытые символы из строки, представляющей дату. Я использую .Net Fiddle, и вы можете увидеть строку, которая пытается выполнить ParseExact.Не удается удалить скрытые символы из строки

Это фрагмент. См. Ссылку на скрипт для рабочего кода.

var dateTime = "2015-04-14 07:30:00 PM"; //<= this throws an error from some hidden char 
    dateTime = Regex.Replace(dateTime, @"[^\w:\s-]", ""); 
    Console.WriteLine(dateTime); 
    DateTime dateWithTime = DateTime.ParseExact(dateTime, "yyyy-MM-dd HH:mm:ss tt", 
     CultureInfo.InvariantCulture); 
    Console.WriteLine("OK"); 
+0

Можете ли вы перечислить строку и напечатать номер юникода символов, чтобы можно было проверить, какой символ вызывает проблемы? –

+0

печать символов юникода https://dotnetfiddle.net/enZv4B – user1186050

+0

@AlexeiLevenkov: '\ s' находится в' [^] 'группе, поэтому он игнорирует' \ s', ... –

ответ

4

HH в строке формата относится к часов в 24-часовом, которые не работают при использовании AM/PM в формате строки для времени ТЧ.

Изменить HHhh.

4

Это не невидимый персонаж. Ваше использование HH конфликтует с использованием tt. HH - это 24-часовое время, но вы используете tt для интерпретации PM (12-часовое время). Измените его на hh, и он работает.

var dateTime = "2015-04-14 07:30:00 PM"; 
//dateTime = Regex.Replace(dateTime, @"[^\w:\s-]", ""); <= not needed 
Console.WriteLine(dateTime); 
DateTime dateWithTime = DateTime.ParseExact(dateTime, "yyyy-MM-dd hh:mm:ss tt", 
    CultureInfo.InvariantCulture); 
Console.WriteLine("OK"); 
1

Вам нужно изменить HH на hh.

yyyy-MM-dd hh:mm:ss tt 
Смежные вопросы