C#のTimeSpan型の使い方!時間の差を計算しよう
生徒
「時間の計算ってC#でできますか?例えば二つの時刻の差を知りたいとき、どうすればいいのかな?」
先生
「C#ではTimeSpanという型を使うことで、時間差の計算や経過時間の扱いがとても簡単にできますよ。」
生徒
「TimeSpanって初めて聞きました。どんなときに使うものなんですか?」
先生
「それでは、TimeSpanの基本的な使い方や、よくある時間計算の例を順番に見ていきましょう。」
1. TimeSpanとは?
C#のTimeSpan(たいむすぱん)は、時間の長さを表す型です。時間そのものを表すDateTimeとは違い、TimeSpanは「差」を表すための型です。たとえば「2時間30分」や「45秒」など、具体的な時間の長さを扱います。プログラムの中で経過時間を計測したり、二つの時刻の差を求めたりするときに役立ちます。さらに、ゲームやアプリの操作記録を扱うときにもよく使われるため、初心者のうちに理解しておくと後でとても便利です。
2. TimeSpanを作成する基本
TimeSpanを作る方法はいくつかありますが、初心者がまず覚えたいのは「時間・分・秒などを直接指定する方法」と「DateTimeの差を計算して自動的に作られる方法」です。TimeSpan.FromHours のようなメソッドを使うと簡単に時間の長さを作れます。数値を直接渡すため、初心者にも理解しやすい書き方になっています。
TimeSpan span = TimeSpan.FromHours(2.5);
Console.WriteLine(span);
02:30:00
この例では「2.5時間=2時間30分」のTimeSpanが作られています。アプリ開発でよく使われる「作業時間」や「経過時間」の扱いにもぴったりです。また、FromMinutesやFromSecondsなどもあるため、用途に応じて細かく調整できます。
3. DateTime同士の差からTimeSpanを求める方法
実際の開発で最も使われるのがこのパターンです。「開始時刻」と「終了時刻」から差を求める場合、演算子のマイナスを使うだけでTimeSpanが得られる仕組みになっています。例えば「朝9時から夕方5時まで働いた」ような時間を計算する場合に特に役立ちます。
DateTime start = new DateTime(2025, 11, 18, 9, 0, 0);
DateTime end = new DateTime(2025, 11, 18, 17, 0, 0);
TimeSpan diff = end - start;
Console.WriteLine(diff);
08:00:00
このように、TimeSpanは「8時間」という結果を返してくれます。日時の計算を行う場面では非常に直感的で、自然な記述になっているため初心者でも扱いやすいです。プログラムを作るときに、作業時間の管理、イベント時間の計測などにも応用できます。
4. TimeSpanから時間・分・秒を取り出す
TimeSpanの中から、時間、分、秒などを個別に取り出すことも簡単にできます。ゲームのタイマーや作業時間の表示など、ユーザーに見せる形に整えるときに必ず使う操作なので、覚えておくととても便利です。
TimeSpan span = TimeSpan.FromMinutes(150);
Console.WriteLine(span.Hours);
Console.WriteLine(span.Minutes);
Console.WriteLine(span.TotalMinutes);
2
30
150
Hoursは「整数の時間部分」、Minutesは「整数の分部分」、TotalMinutesは「全体を分に換算した値」です。見た目の時間表示と内部での計算を区別するためにも、Total系のプロパティ(TotalHours、TotalSecondsなど)を知っておくと開発の幅が広がります。
5. TimeSpanを使った加算と減算
TimeSpanには足し算や引き算ができる機能もあります。「あと30分延長」「10分短縮」のように時間を増減させたいときに便利です。時間を調整する処理はさまざまなアプリで必要になるため、これも基本として押さえておきたいポイントです。
TimeSpan span = TimeSpan.FromHours(1);
TimeSpan added = span + TimeSpan.FromMinutes(30);
Console.WriteLine(added);
01:30:00
このように、TimeSpanは計算を行いやすいように設計されています。複雑な時間管理の処理もシンプルな記述で済むため、初心者でも安心して使えます。特にスケジュール管理やアプリのログ機能を作るときなど、さまざまな場面で役立ちます。
まとめ
TimeSpan型で時間計算の考え方を整理しよう
この記事では、C#におけるTimeSpan型の使い方について、基礎から応用までを順番に確認してきました。 TimeSpanは「日時そのもの」を表すDateTimeとは異なり、「時間の長さ」や「時間の差」を扱うための型です。 二つの時刻の差を計算したり、経過時間や作業時間を管理したりする場面で非常によく使われます。 C#で時間計算を行う際にTimeSpanを正しく理解しておくことで、プログラム全体の可読性や安全性も高まります。
TimeSpanの基本として、FromHoursやFromMinutesなどのメソッドを使えば、 「何時間」「何分」「何秒」といった感覚的な指定で時間の長さを作成できます。 数値を直接指定するため、初心者でも直感的に理解しやすく、実務でも頻繁に利用されます。 また、DateTime同士を引き算することで自動的にTimeSpanが得られる点は、 C#の時間計算がとても扱いやすい理由の一つです。
時間差計算と表示で意識したいポイント
TimeSpanを扱ううえで重要なのが、部分的な値と全体の値の違いです。 HoursやMinutesは「表示用」として使われることが多く、 TotalHoursやTotalMinutesは「計算用」として使われることが多いプロパティです。 この違いを理解していないと、想定と異なる計算結果になってしまうことがあります。 プログラムの中で時間をどう扱うかを意識しながら、適切なプロパティを選ぶことが大切です。
さらに、TimeSpanは加算や減算も簡単に行えるため、 スケジュール調整や制限時間の管理、アプリの利用時間測定など、 幅広い用途に応用できます。 C#で時間計算を行う場合、TimeSpanを中心に考えることで、 コードがすっきりと整理され、保守性も向上します。
まとめとしてのサンプルプログラム
ここで、この記事の内容を整理したサンプルプログラムを見てみましょう。 開始時刻と終了時刻から作業時間を計算し、TimeSpanの特徴を確認できる構成になっています。
DateTime start = new DateTime(2025, 11, 18, 10, 0, 0);
DateTime end = new DateTime(2025, 11, 18, 15, 45, 0);
TimeSpan workTime = end - start;
Console.WriteLine("作業時間:" + workTime);
Console.WriteLine("作業時間(分):" + workTime.TotalMinutes);
このように、TimeSpanを使えば時間の差を簡単に計算でき、 表示用と計算用の両方に対応できます。 日々の業務アプリや学習用プログラムでも、そのまま活用できる考え方です。
生徒:「TimeSpanって、ただの時間表示用だと思っていましたが、計算にすごく向いているんですね。」
先生:「そうですね。C#では時間の差や経過時間を扱う場面が多いので、TimeSpanは欠かせない存在です。」
生徒:「DateTimeを引き算するだけでTimeSpanになるのが、とても分かりやすかったです。」
先生:「直感的に書けるのがC#の良いところですね。HoursとTotalHoursの違いも、しっかり理解できましたか?」
生徒:「はい。表示用と計算用で使い分ける必要があることが分かりました。」
先生:「その理解があれば、時間管理のプログラムはぐっと書きやすくなりますよ。」