現在の稼働時間を表示するのに文法的に正しい文字列を返したいです。たとえば、3 年 7 か月 11 日 1 時間 16 分 0 秒は、単数単位は複数形であってはならず、0 単位は複数形であるべきであることを意味します。 (例: 年、月などをまだ表示していない場合は表示しない)
ticks メソッドは 1 か月を超えると機能しないため、ManagementObject を使用していますが、datetime の計算と分解の方法について混乱しています (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
}