English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C#にDateTime構造体が含まれており、日付と時間を処理できます。
C#で日付と時刻を使用するには、newキーワードを使用してDateTime構造体のオブジェクトを作成します。以下にデフォルト値を持つDateTimeオブジェクトを作成します。
DateTime dt = new DateTime(); // デフォルト値0を割り当てます1/01/0001 00:00:00
DateTimeオブジェクトのデフォルト値と最小値は0001年1月1日00:00:00(真夜中)。最大値は9999年12月31日が夜11:59:59
DateTime構造体の異なるコンストラクタを使用してDateTimeオブジェクトに初期値を割り当てます。
//デフォルト値0を割り当てます1/01/0001 00:00:00 DateTime dt1 = new DateTime(); //年、月、日を割り当てます DateTime dt2 = new DateTime(2015, 12, 31); //年、月、日、hour、min、secondsを割り当てます DateTime dt3 = new DateTime(2015, 12, 31, 5, 10, 20); //年、月、日、hour、min、seconds、UTC時区を割り当てます DateTime dt4 = new DateTime(2015, 12, 31, 5, 10, 2, DateTimeKind.Utc);
上記の例では、コンストラクタで年、月、日を指定しています。年は0001から9999、月は1から12まで、日付は1から31。これらの範囲外に設定された値は、ランタイムエラーが発生します。
DateTime dt = new DateTime(2015, 12, 32); //例外を発生させます:日が範囲外です
異なるDateTime構造体のコンストラクタを使用して、日付、時刻、時区、カレンダー、ローカライズを設定します。
Ticksは、ユリウス暦00:00:00.000年から始まる日付と時刻を示します。1月1日から100ナノ秒の間隔数を示します。以下にDateTimeオブジェクトをスケール数で初期化します。
DateTime dt = new DateTime(636370000000000000); DateTime.MinValue.Ticks; //ticksの最小値 DateTime.MaxValue.Ticks; // ticksの最大値
DateTime構造体には静的フィールド、プロパティ、メソッドがあります。以下に重要な静的フィールドとプロパティの例を示します。
DateTime currentDateTime = DateTime.Now; //現在の日時を返します DateTime todaysDate = DateTime.Today; // 今日の日付を返します DateTime currentDateTimeUTC = DateTime.UtcNow;// 現在のUTC日時を返します DateTime maxDateTimeValue = DateTime.MaxValue; // DateTimeの最大値を返します DateTime minDateTimeValue = DateTime.MinValue; // DateTimeの最小値を返します
TimeSpanは、日、時間、分、秒、ミリ秒で時間を表す構造体です。
DateTime dt = new DateTime(2015, 12, 31); TimeSpan ts = new TimeSpan(25,20,55); DateTime newDate = dt.Add(ts); Console.WriteLine(newDate);//1/1/2016 1:20:55 AM
二つの日期を減算するとTimeSpanが得られます。
DateTime dt1 = new DateTime(2015, 12, 31); DateTime dt2 = new DateTime(2016, 2, 2); TimeSpan result = dt2.Subtract(dt1);//33.00:00:00
DateTime構造体のオーバーロード+、-、==!=、>、<、<=、>=演算子、日期の加算、減算、比較を簡略化します。これにより、日期を簡単に処理できます。
DateTime dt1 = new DateTime(2015, 12, 20); DateTime dt2 = new DateTime(2016, 12, 31, 5, 10, 20); TimeSpan time = new TimeSpan(10, 5, 25, 50); Console.WriteLine(dt2 + time); // 1/10/2017午前10:36:10 Console.WriteLine(dt2 - dt1); //377.05:10:20 Console.WriteLine(dt1 == dt2); //False Console.WriteLine(dt1 != dt2); //True Console.WriteLine(dt1 > dt2); //False Console.WriteLine(dt1 < dt2); //True Console.WriteLine(dt1 >= dt2); //False Console.WriteLine(dt1 <= dt2);//True
DateTime構造体には以下のメソッドが含まれており、日期と時間を文字列に変換します。
メソッド | 説明 |
---|---|
ToString | DateTime値を現在の地域に基づく指定のフォーマットの文字列に変換します。 |
ToShortDateString | DateTime値を現在の地域に基づく短日期文字列(M/d/yyyy形式)。 |
ToShortTimeString | DateTime値を現在の地域に基づく短時間文字列(h: mm: ss形式)に変換します。 |
ToLongDateString | DateTime値を現在の地域に基づく長日期文字列(dddd, MMMM d, yyyy形式)に変換します。 |
ToLongTimeString | DateTime値を現在の地域に基づく長時間文字列(h:mm:ss tt形式)に変換します。 |
DateTimeを異なるフォーマットの文字列に変換する方法を示す例です。
var dt = DateTime.Now; Console.WriteLine("Date String Current Culture: " + dt.ToString("d")); Console.WriteLine("MM/dd/yyyy Format: " + dt.ToString("MM/dd/yyyy")); Console.WriteLine("dddd, dd MMMM yyyy Format: " + dt.ToString("dddd, dd MMMM yyyy")); Console.WriteLine("MM/dd/yyyy h:mm tt Format: " + dt.ToString("MM/dd/yyyy h:mm tt")); Console.WriteLine("MMMM dd Format:" + dt.ToString("MMMM dd")); Console.WriteLine("HH:mm:ss Format: " + dt.ToString("HH:mm:ss")); Console.WriteLine("hh:mm tt Format: " + dt.ToString("hh:mm tt")); Console.WriteLine("Short Date String: " + dt.ToShortDateString()); Console.WriteLine("Long Date String: " + dt.ToLongDateString()); Console.WriteLine("Short Time String: " + dt.ToShortTimeString()); Console.WriteLine("Long Time String: " + dt.ToLongTimeString());
Parse ()、ParseExact ()、TryParse ()およびTryParseExact ()メソッドを使用して、有効な日付と時刻の文字列をDateTimeオブジェクトに変換することができます。
指定された文字列が日付と時刻の有効な表現形式でない場合、Parse ()およびParseExact ()メソッドは例外をスローします。したがって、TryParse ()またはTryParseExact ()メソッドを使用することをお勧めします。なぜなら、文字列が無効の場合はfalseを返すからです。
var str = "5/12/2020"; DateTime dt; var isValidDate = DateTime.TryParse(str, out dt); if(isValidDate) Console.WriteLine(dt); else Console.WriteLine($"{str} は有効な日付文字列ではありません");