我想返回一个字符串,它在语法上是正确的,可以显示当前的正常运行时间。例如,3 年 7 个月 11 天 1 小时 16 分钟和零秒,表示单数单位不应为复数,零单位应为复数,但如果尚未出现则不应显示零(例如,不要显示年、月等,如果它还没有发生)
由于 ticks 方法不会超过一个月,我正在使用 ManagementObject,但我对如何进行日期时间计算和分解感到困惑(我对 C# 非常陌生,所以我正在制作一个执行各种功能的实用程序所以我可以学习各种各样的东西。
这就是我现在所拥有的,而且不是很多......
任何帮助是极大的赞赏。
public string getUptime()
{
// this should be grammatically correct, meaning, 0 and greater than 1 should be plural, one should be singular
// if it can count in realtime, all the better
// in rare case, clipping can occur if the uptime is really, really huge
// you need a function that stores the boot time in a global variable so it's executed once so repainting this won't slow things down with quer
SelectQuery query = new SelectQuery("SELECT LastBootUpTime FROM Win32_OperatingSystem WHERE Primary='true'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject mo in searcher.Get())
{
// this is the start time, do math to figure it out now, hoss
DateTime boot = ManagementDateTimeConverter.ToDateTime(mo.Properties["LastBootUpTime"].Value.ToString());
// or is it better to break up everything into days/hours/etc, i think its better to do that at the end before it gets returned
}
string now = DateTime.Now.ToShortDateString();
return "3 years, 7 months, 11 days, 1 hour, 16 minutes and zero seconds"; // long string for testing label width
}