2015-02-11 70 views
0

如果我把财产作为字符串时输出正常来了,但我有日期和时间做它,当我与日期和时间进行转换,它会显示与错误的日期和时间又该只有一条记录我做任何想法。 我在其他情况下所做的工作。但是当我使用注册表安装日期它将它转换为日期和时间,但我没有得到完美的日期。转换显示错误的数据

controllerModel.cs

private DateTime _installedOn; 

public DateTime installedon 
{ 
    get { return _installedOn; } 
    set 
    { 
     _installedOn = value; 
     RaisePropertyChanged("installedon"); 
    } 
} 

ControlPanelViewModel.cs

#region Methods 
public void ListedSoftware() 
{ 
    string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 
    using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey)) 
    { 
     foreach (string skName in rk.GetSubKeyNames()) 
     { 
      using (RegistryKey sk = rk.OpenSubKey(skName)) 
      { 
       try 
       { 
        Controller objct = new Controller(); 
        objct.displayname = sk.GetValue("DisplayName").ToString(); 
        objct.displayversion = sk.GetValue("DisplayVersion").ToString(); 
        objct.publisher = sk.GetValue("Publisher").ToString(); 
        objct.installedon = Convert.ToDateTime(sk.GetValue("InstallDate")); 
        objct.estimatedSize = sk.GetValue("EstimatedSize").ToString(); 
        Students.Add(objct); 
       } 
       catch (Exception ex) 
       { } 
      } 
     } 
    } 
} 
+0

如果我正确理解你,你很难将'InstallDate'中的值转换为'DataTime'? – MickyD 2015-02-11 12:24:18

+0

当我通过字符串输出像20150122所有已安装的软件在registery,当我通过datetime只有一个数据与错误的日期,如01220001我该怎么办 – 2015-02-11 12:27:13

回答

1

展望我的注册表,所有的InstallDate值似乎是在格式年月日,其中YYYY是年,MM月份和DD一天。

,解析字符串格式为DateTime对象,你可以使用DateTime.ParseExact方法:

var timestampString = sk.GetValue("InstallDate").ToString(); 
var timestamp = DateTime.ParseExact(timestampString, "yyyyMMdd", 
    CultureInfo.InvariantCulture); 

请注意,InstallDate值可能不会在注册表中的那部分所有子项存在,所以你会需要考虑到这一点。

+0

不工作,像“system.dateTime.ParseExact()的最佳重载的方法匹配错误有一些无效的说法我也尝试这种‘yyyyMMddHHmmssfff’,但没有工作 – 2015-02-12 05:12:34

+0

的那超载'DateTime.ParseExact'(字符串,字符串,IFormatProvider)在.NET中已经存在,因为至少Framework 2.0,所以我不知道为什么你会得到这个错误。是否在顶部添加'using System.Globalization;'你的代码文件?你需要这个命名空间来引用'CultureInfo.InvariantCulture'。 – 2015-02-12 09:18:10

+0

是的我添加system.Globlization – 2015-02-12 09:19:10

1

你也可以使用DateTime.Parse(),这一个是工作wor me我。

CultureInfo provider = CultureInfo.InvariantCulture; 
objct.installedon = DateTime.Parse(sk.GetValue("InstallDate").ToString(), provider); 

顺便说一句,我得到了类似的结果(01010001)时sk.GetValue("InstallDate")为空。

+0

不工作:(没有来 – 2015-02-11 13:55:57

+0

你有什么价值 - 'sk。的GetValue(“InstallDate”)。的ToString()'? – lena 2015-02-11 14:06:04