Строка, извлекаемая как shell32 GetDetailsOf, никогда не является жестко закодированной строкой '==', которая выглядит одинаково. Невозможно выполнить синтаксический анализ с помощью DateTime.Parse

Моя настоящая цель - DateTime.Parse строку даты из расширенного поля даты Shell32 GetDetailsOf. Продолжая отладку, я просто создал строку, которая выглядит одинаково, и DateTime может ее проанализировать. Когда я просматриваю 2 строки в памяти, они кажутся разными.

Только первые несколько байт.....

s > 4c 22 2e 63 16 00 00 00 0e 20 39 00 2f 00 0e 20 35 00 2f

q > 4c 22 2e 63 11 00 00 00 39 00 2f 00 35 00 2f 00 32 00 30

Есть ли способ отформатировать строку, чтобы я мог проанализировать ее с помощью DateTime.Parse?

        Shell32.Shell shell = new Shell32.Shell();
        Shell32.Folder objFolder;
        objFolder = shell.NameSpace(folder);
        int i = 0;
        foreach (Shell32.FolderItem2 item in objFolder.Items())
        {
            if (item.Type == "Windows Recorded TV Show")
            {
                mediaArray[i, 0] = objFolder.GetDetailsOf(item, 21);   // serName
                mediaArray[i, 1] = objFolder.GetDetailsOf(item, 254);  // epName
                mediaArray[i, 2] = objFolder.GetDetailsOf(item, 259);  // desc
                mediaArray[i, 3] = objFolder.GetDetailsOf(item, 258);  // broad Date


                DateTime dateValue;
                CultureInfo culture;
                DateTimeStyles styles;
                styles = DateTimeStyles.AssumeLocal;
                culture = CultureInfo.CreateSpecificCulture("en-US");
                string s = mediaArray[i, 3].Normalize();  //  Guessing this string isn't ASCII?                                         
                string q = "9/5/2014 12:00 AM";           
                if (s == q) { MessageBox.Show("They are the same."); } // Never Entered. ):
                MessageBox.Show(s+"\n"+q); //  They appear exactly the same!

                dateValue = DateTime.Parse(q, culture, styles); // parses correctly
                dateValue = DateTime.Parse(s, culture, styles); // fails at runtime


                i++;
            }
        }

person ttugates    schedule 02.10.2014    source источник
comment
Откуда вы знаете, что 2-я строка анализируется правильно, если она не удалась в первой строке?   -  person Scott Chamberlain    schedule 02.10.2014
comment
Справедливый вопрос, но на самом деле я просто менял переменную перед запуском. Когда я разместил вопрос, я скопировал строку и поставил ее в неправильном порядке ... Я обновлю исходный пост, чтобы не сбивать других людей.   -  person ttugates    schedule 02.10.2014


Ответы (1)


Как можно Я извлекаю дату из столбца «Создано медиа» видеофайла?

Эх, вот нашел ответ..

Я искал со вчерашнего вечера, и когда я, наконец, задал вопрос, я нашел ответ в течение 30 минут.

По-видимому, символы (char)8206 (char)8207 существуют в строке s GetDetailsOf. Эти символы кажутся невидимыми, когда я использую их MessageBox.Show(), но, тем не менее, их удаление решило мою проблему.

 // These are the characters that are not allowing me to parse into a DateTime
 char[] charactersToRemove = new char[] 
 {
  (char)8206,
  (char)8207
 };

  // Removing the suspect characters
  foreach (char c in charactersToRemove)
  value = value.Replace((c).ToString(), "").Trim();

Я знаю разницу между == и String.Equals. Но я специально использовал == для отладки проблемы.

Я нашел символы 8206 и 8207, пытаясь удалить их с помощью другого поста. Кто-нибудь хочет сказать, как я мог найти эти невидимые символы во время отладки?

person ttugates    schedule 02.10.2014