今回は、日付、時刻の操作方法。
DateTime構造体
DateTime構造体のインスタンス生成の主な方法と、よく使われるTodayプロパティとNowプロパティ。
// インスタンス生成 var dt1 = new DateTime(2016, 2, 15); var dt2 = new DateTime(2016, 2, 15, 8, 45, 20); // TodayとNowプロパティ var today = DateTime.Today; var now = DateTime.Now;
また、DateTime構造体には、年、月、日など、様々な日付および時刻の情報を、プロパティから参照することができる。
※ここでは割愛。
指定した日付の曜日の求め方。
var today = DateTime.Today; DayOfWeek dayOfWeek = today.DayOfWeek; if(dayOfWeek == DayOfWeek.Sunday) // DayOfWeekプロパティの型はDayOfWeek列挙型 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)) // 2017/06/21 0:00:00 Console.WriteLine(dt1); DateTime dt2; if(DateTime.TryParse("2017/6/21 10:41:38", out dt2)) // 2017/06/21 10:41:38 Console.WriteLine(dt2);
日時のフォーマット
日時を文字列に変換するには、ToStringメソッドを使用する。
ToStringの引数に、あらゆる書式を指定すると、結果の値も変わってくる。
var date = new DateTime(2016, 4, 7, 21, 6, 47); var s1 = date.ToString("d"); // 2016/04/07
日付を和暦で表示するには、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; // TimeSpanオブジェクトを加える 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;