我需要能够将以下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;
}
}
答案 0 :(得分:1)
首先,解析string
以创建integer
或long
。从结果中创建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