如何将长日期时间字符串转换为C#中的天数

时间:2014-03-12 12:57:54

标签: c# .net datetime wmi

我需要能够将以下wmi查询返回的长日期时间字符串转换为天数:

SelectQuery query = new SelectQuery("SELECT * FROM Win32_NetworkLoginProfile");

该名称是PasswordAge。 PasswordAge数据类型:datetime

密码生效的时间长度。此值是根据自上次更改密码以来经过的秒数计算的。

示例:00000011171549.000000:000

ManagementScope scope = CreateNewManagementScope(computerName);
SelectQuery query = new SelectQuery("SELECT Name, PasswordAge FROM Win32_NetworkLoginProfile WHERE Privileges=2 ");
try
{
    using (var searcher = new ManagementObjectSearcher(scope, query))
    {
        ManagementObjectCollection accounts = searcher.Get();
        List<string> accountNames = new List<string>();
        foreach (ManagementObject account in accounts)
        {
            string name = account["Name"].ToString();
            string pAge = account["PasswordAge"].ToString();

            accountNames.Add(name + " " + pAge);
         }
         lstAccounts.DataSource = accountNames;
     }
}

3 个答案:

答案 0 :(得分:1)

首先,解析string以创建integerlong。从结果中创建TimeSpan,然后获取该对象的Days属性:

var s = (long)Double.Parse(pAge);
var t = TimeSpan.FromSeconds(s);
Console.WriteLine(t.Days);

请注意,Days属性是整数。它代表TimeSpan中的整天数。如果您需要更精确,请包括小时数或秒数等。

另请注意,您提供的示例(19521201000230.000000秒)代表约619,000年。我的猜测是,当用户从未更改过密码时,这是查询返回的默认值。我提出这个问题是因为它比TimeSpan(大约29,000年)所表示的最长时间长,所以这段代码不能用于默认值。

答案 1 :(得分:0)

除以1000*60*60*24 = 86400000

答案 2 :(得分:0)

我知道这已经晚了 - 但这个问题被称为另一个问题的可能重复(what is this format for seconds XXXXXXX.XXXXX:XXX (Win32_NetworkLoginProfile))。实际格式记录在此处:https://msdn.microsoft.com/en-us/library/aa390895(v=vs.85).aspx