【发布时间】:2014-10-02 15:47:13
【问题描述】:
我的真正目标是 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++;
}
}
【问题讨论】:
-
如果第一行失败,你怎么知道第二行解析正确?
-
公平的问题,但我实际上只是在运行时间之前更改了变量。当我发布问题时,我复制了该行并按错误的顺序放置...我将更新原始帖子,以免让其他人失望。