转换显示错误数据

时间:2015-02-11 12:19:26

标签: c#

如果我把属性作为字符串,时间输出将正确到来但我必须用日期和时间来做它我用日期和时间转换它只显示一个错误的日期和时间的记录我应该做什么任何想法。 我在其他情况下做了什么工作。但是当我使用注册表安装日期时,它将其转换为日期和时间,但我没有得到完美的约会。

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)
                { }
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

你也可以使用DateTime.Parse(),这个就是我的工作。

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

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

答案 1 :(得分:1)

查看我的注册表,所有InstallDate值似乎采用 yyyyMMdd 格式,其中 yyyy 是年份, MM < / em>月份和 dd 当天。

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

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

请注意,注册表该部分的所有子项中可能都不存在InstallDate值,因此您需要考虑这一点。

答案 2 :(得分:0)

也许,Convert.ToDateTime(string)使用无效格式来解析您的注册表项。您应该使用Convert.ToDateTime(String, IFormatProvider)方法试验您的日期格式。这是msdn with CultureInfo的好例子。不幸的是,CultureInfo.CurrentCulture会对你有用