今回は、日付、時刻の操作方法。
DateTime構造体
DateTime構造体のインスタンス生成の主な方法と、よく使われるTodayプロパティとNowプロパティ。
var dt1 = new DateTime(2016, 2, 15);
var dt2 = new DateTime(2016, 2, 15, 8, 45, 20);
var today = DateTime.Today;
var now = DateTime.Now;
また、DateTime構造体には、年、月、日など、様々な日付および時刻の情報を、プロパティから参照することができる。
※ここでは割愛。
指定した日付の曜日の求め方。
var today = DateTime.Today;
DayOfWeek dayOfWeek = today.DayOfWeek;
if(dayOfWeek == DayOfWeek.Sunday)
public enum DayOfWeek {
Sunday = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6
DayTime構造体を使用すれば、閏年の判定も可能。
var isLeapYear = DateTime.IsLeapYear(2016);
日付形式のもう字列をDateTimeオブジェクトに変換する方法。
DateTime dt1;
if(DateTime.TryParse("2017/6/21", out dt1))
Console.WriteLine(dt1);
DateTime dt2;
if(DateTime.TryParse("2017/6/21 10:41:38", out dt2))
Console.WriteLine(dt2);
日時のフォーマット
日時を文字列に変換するには、ToStringメソッドを使用する。
ToStringの引数に、あらゆる書式を指定すると、結果の値も変わってくる。
var date = new DateTime(2016, 4, 7, 21, 6, 47);
var s1 = date.ToString("d");
日付を和暦で表示するには、DateTimeクラスを使用する。
var date = new DateTime(2016, 8, 15);
var culture = new CultureInfo("ja-JP");
culture.DateTimeFormat.Calendar = new JapaneseCalendar();
var str = date.ToString("ggyy年M月d日", culture);
指定した日付の元号を得るには、DateTimeFormatInfoクラスのGetEraNameメソッドを使用する。
var date = new DateTime(1995, 8, 24);
var culture = new CultureInfo("ja-JP");
culture.DateTimeFormat.Calendar = new JapaneseCalendar();
var era = culture.DateTimeFormat.Calendar.GetEra(date);
var eraName = culture.DateTimeFormat.GetEraName(era);
指定した日付の曜日を得るには、DateTimeFormatInfoクラスのGetDayNameメソッドを使用する。
var date = new DateTime(1998, 6, 25);
var culture = new CultureInfo("ja-JP");
culture.DateTimeFormat.Calendar = new JapaneseCalendar();
var dayOfWeek = culture.DateTimeFormat.GetDayName(date.DayOfWeek);
DateTimeの比較
日時を比較するには、比較演算子をそのまま利用できる。
var dt1 = new DateTime(2006, 10, 18, 1, 30, 21);
var dt2 = new DateTime(2006, 11, 2, 18, 5, 28);
if (dt1 < dt2)
else if (dt1 == dt2)
時刻情報を含まない日付だけを比較する場合は、Dateプロパティを使う。
var dt1 = new DateTime(2001, 10, 25, 1, 30, 21);
var dt2 = new DateTime(2001, 10, 25, 18, 5, 28);
if (dt1.Date < dt2.Date)
else if (dt1.Date == dt2.Date)
日時の計算
指定した時分秒後を求めるには、TimeSpan構造体を使用する。
var now = DateTime.Now;
var future = now + now TimeSpan(1, 30, 0);
n日後、n日前の日付を求めるには、AddYears、AddMonthsメソッドを利用する。
var date = new DateTime(2009, 10, 22);
var future = date.AddYears(2).AddMonths(5);
2つの日時の差を求める。
var date1 = new DateTime(2009, 10, 22, 1, 30, 20);
var date2 = new DateTime(2009, 10, 22, 2, 40, 56);
TimeSpan diff = date2 - date1;
Console.WriteLine("差は、{0}日間{1}時間{2}分{3}秒です", diff.Days, diff.Hours, diff.Minutes, diff.Seconds);
Console.WriteLine("トータルで{0}秒です", diff.TotalSeconds);
2つの日付の日数差を求める。
var date1 = new DateTime(2009, 10, 22, 1, 30, 20);
var date2 = new DateTime(2009, 10, 22, 2, 40, 56);
TimeSpan diff = date2.Date - date1.Date;
Console.WriteLine("{0}日間", diff.Days);
DaysInMonth静的メソッドを使えば、月末日を求めれる。
var today = DateTime.Today;
int day = DateTime.DaysInMonth(today.Year, today.Month);
var endOfMonth = new DateTime(today.Year, today.Month, day);
DayOfYearプロパティを使って、1月1日からの通算日を求める。
var today = DateTime.Today;
int dayOfYear = today.DayOfYear;