C#でのDateDiffの求め方とは?日・時間・分・秒・ミリ秒の差分と月・年・営業日の差分

- システム
エンジニア - C#で日付の差分を求めるにはどうすればいいのですか。
- プロジェクト
マネージャー - DateTimeクラス・TimeSpanクラスを利用して年・月・日・時間・分・秒・ミリ秒の差分を求めます。
C#でのDateDiffの求め方とは?
今回は、C#での日付差分を求める方法について説明します。VB.NETではDateDiff関数という、日付の差分を求める関数がありますが、C#にはありません。その代わりに、DateTimeクラス・TimeSpanクラスを利用して日付の差分を求める方法を紹介します。
C#における日付差分の求め方に興味のある方はぜひご覧ください。
日・時間・分・秒・ミリ秒の差分
C#での日・時間・分・秒・ミリ秒の差分計算方法を紹介します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using System; public class Hello{ // 時間差の計算用関数 static void CalcInterval(DateTime day1, DateTime day2){ DateTime dateFrom = day1; DateTime dateTo = day2; // 大きいDateTime - 小さいDateTimeにする if (day1 > day2){ dateFrom = day2; dateTo = day1; } // 差分を計算 TimeSpan interval = dateTo - dateFrom; Console.WriteLine(“DateDiff: {0} Days”, interval.TotalDays); // 日の差分 Console.WriteLine(“HourDiff: {0} Hours”, interval.TotalHours); // 時間の差分 Console.WriteLine(“MinuteDiff: {0} Minutes”, interval.TotalMinutes); // 分の差分 Console.WriteLine(“SecondDiff: {0} Seconds”, interval.TotalSeconds); // 秒の差分 Console.WriteLine(“MillisecondDiff: {0} Milliseconds”, interval.TotalMilliseconds); // ミリ秒の差分 } public static void Main(){ var day1 = new DateTime(2021, 3, 21); var day2 = new DateTime(2021, 3, 25); CalcInterval(day1, day2); var day3 = new DateTime(2021, 3, 21, 2, 1, 15); var day4 = new DateTime(2021, 3, 25, 3, 2, 30); CalcInterval(day3, day4); } } |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 |
DateDiff: 4 Days HourDiff: 96 Hours MinuteDiff: 5760 Minutes SecondDiff: 345600 Seconds MillisecondDiff: 345600000 Milliseconds DateDiff: 4.04253472222222 Days HourDiff: 97.0208333333333 Hours MinuteDiff: 5821.25 Minutes SecondDiff: 349275 Seconds MillisecondDiff: 349275000 Milliseconds |
このようにC#では、日・時間・分・秒・ミリ秒の差分を算出できます。
月の差分
C#での月の差分計算方法を紹介します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
using System; public class Hello{ // 時間差の計算用関数 static void CalcMonthInterval(DateTime day1, DateTime day2){ DateTime dateFrom = day1; DateTime dateTo = day2; // 大きいDateTime - 小さいDateTimeにする if (day1 > day2){ dateFrom = day2; dateTo = day1; } // 差分を計算 var interval = (dateTo.Month + (dateTo.Year - dateFrom.Year) * 12) - dateFrom.Month; Console.WriteLine(“MonthDiff: {0} Months”, interval); // 月の差分 } public static void Main(){ var day1 = new DateTime(2020, 3, 21); var day2 = new DateTime(2021, 3, 25); CalcMonthInterval(day1, day2); // MonthDiff: 12 Months var day3 = new DateTime(2019, 12, 21, 2, 1, 15); var day4 = new DateTime(2021, 3, 25, 3, 2, 30); CalcMonthInterval(day3, day4); // MonthDiff: 15 Months var day5 = new DateTime(2021, 3, 21, 2, 1, 15); var day6 = new DateTime(2021, 3, 25, 3, 2, 30); CalcMonthInterval(day5, day6); // MonthDiff: 0 Months } } |
実行結果は以下のようになります。
1 2 3 |
MonthDiff: 12 Months MonthDiff: 15 Months MonthDiff: 0 Months |
このようにC#では、月の差分を算出できます。
年の差分
C#での年の差分計算方法を紹介します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
using System; public class Hello{ // 時間差の計算用関数 static void CalcYearInterval(DateTime day1, DateTime day2){ DateTime dateFrom = day1; DateTime dateTo = day2; // 大きいDateTime - 小さいDateTimeにする if (day1 > day2){ dateFrom = day2; dateTo = day1; } // 差分を計算 var interval = dateTo.Year - dateFrom.Year; Console.WriteLine(“YearDiff: {0} Years”, interval); // 年の差分 } public static void Main(){ var day1 = new DateTime(2020, 3, 21); var day2 = new DateTime(2021, 3, 25); CalcYearInterval(day1, day2); // YearDiff: 1 Years var day3 = new DateTime(2021, 12, 21, 2, 1, 15); var day4 = new DateTime(2019, 3, 25, 3, 2, 30); CalcYearInterval(day3, day4); // YearDiff: 2 Years var day5 = new DateTime(2021, 3, 21, 2, 1, 15); var day6 = new DateTime(2021, 3, 25, 3, 2, 30); CalcYearInterval(day5, day6); // YearDiff: 0 Years } } |
実行結果は以下のようになります。
1 2 3 |
YearDiff: 1 Years YearDiff: 2 Years YearDiff: 0 Years |
営業日の差分
C#での営業日の差分計算方法を紹介します。ここでは、土日以外を営業日とし、祝日は加味しません。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System; public class Hello{ // 営業日の計算用関数 static void CalcBusinessDays(DateTime day1, DateTime day2){ DateTime dateFrom = day1; DateTime dateTo = day2; // 大きいDateTime - 小さいDateTimeにする if (day1 > day2){ dateFrom = day2; dateTo = day1; } // 差分を計算 var interval = 1 + ((dateTo - dateFrom).TotalDays * 5 - (dateFrom.DayOfWeek - dateTo.DayOfWeek) * 2) / 7; if (dateTo.DayOfWeek == DayOfWeek.Saturday) interval--; if (dateFrom.DayOfWeek == DayOfWeek.Sunday) interval--; Console.WriteLine(“DateDiff(business date): {0} Days”, interval); // 営業日の差分 } public static void Main(){ var day1 = new DateTime(2021, 3, 21); var day2 = new DateTime(2021, 3, 25); CalcBusinessDays(day1, day2); // DateDiff(business date): 4 Days var day3 = new DateTime(2021, 3, 1); var day4 = new DateTime(2021, 3, 31); CalcBusinessDays(day3, day4); // DateDiff(business date): 23 Days } } |
実行結果は以下のようになります。
1 2 |
DateDiff(business date): 4 Days DateDiff(business date): 23 Days |
このようにC#では、営業日の差分を算出できます。
- システム
エンジニア - DateTimeクラス・TimeSpanクラスを使って年・月・日・時間・分・秒・ミリ秒の差分を求める方法、よく分かりました。
- プロジェクト
マネージャー - 営業日の差分を求める方法についてもご紹介した方法を参考にしてください。
まとめ
いかがでしたでしょうか。C#での日付差分(DateDiff)を求める方法について説明しました。DateTimeクラス・TimeSpanクラスを利用して、年・月・日・時間・分・秒・ミリ秒の差分を求められます。応用編として、営業日の差分を求める方法についても紹介しました。
ぜひご自身でC#のソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅)システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)