Я хочу вернуть строку, которая является грамматически правильной для отображения текущего времени безотказной работы.Например, 3 года, 7 месяцев, 11 дней, 1 час, 16 минут и ноль секунд, что означает, что единичные единицы не должны быть множественными, а нулевые единицы должны быть множественными, хотя ноль не должен отображаться, если это еще не произошло(например, не отображать годы, месяцы и т. д., если это еще не произошло)
Поскольку метод тиков не будет работать более месяца, я использую 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
}