再起動からの時間?
Windows OS起動時間を取得しようと思い、C#でコードを書いてみました。
System.Environment.TickCount で取得する方法
を試してみたのですが、私の感覚でとコンピュータをシャットダウンし、次にコンピュータの電源を入れてからの時間を取得する予定でしたが、
static void Main(string[] args)
{
int tickCount = System.Environment.TickCount & int.MaxValue;
double StartedTime = tickCount / 1000 / 60; //分
Console.WriteLine(tickCount + "\n");
Console.WriteLine(StartedTime);
int tc = Environment.TickCount; // ミリ秒単位で経過時間を取得
TimeSpan ts = new TimeSpan(0, 0, 0, 0, tc); // 値を TimeSpan 型へ変換する
Console.WriteLine("経過時間 " + ts.Days + "日" + ts.Hours + "時間" + ts.Minutes + "分" + ts.Seconds + "秒");
Console.ReadKey();
}
妙に長い時間が返ってきます。
161904640
2698
経過時間 1日20時間58分24秒
おかしいなぁと思い、コマンドプロンプトより
systeminfo を実行しても同じ
システム起動時間: 2023/12/25, 13:05:19
いやいや、教12/26さっき起動したばっかりなんだけど。と思ったら、これコンピュータを再起動した時の時間です。
// システム起動時間を取得
var uptime = new PerformanceCounter("System", "System Up Time");
uptime.NextValue(); // 初回は0を返すため、1回呼び出す必要がある
var uptimeSpan = TimeSpan.FromSeconds(uptime.NextValue());
Console.WriteLine("WindowsOSが起動してからの時間: " + uptimeSpan.Days + "日" + uptimeSpan.Hours + "時間" + uptimeSpan.Minutes + "分" + uptimeSpan.Seconds + "秒");
PerformanceCounter でも同じでした。
WindowsOSが起動してからの時間: 1日21時間29分23秒
全部同じところを見てるんですね。
原因 高速スタートアップ
高速スタートアップ(Fast Startup)はWindows 8, 8.1から出てきた機能で、電源管理(ACPI)と関係しており、ハイバネーションしつつ、極小の電力で待機状態で推移しているためです。
コンピュータのシャットダウンでは、既に起動している状態・待機している状態と同じで、日時がリセットされないんですね。
Windowsイベントログから取得するしかなさそうです。
コメント