English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# データと時間(DateTime)

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

Ticksは、ユリウス暦00:00:00.000年から始まる日付と時刻を示します。1月1日から100ナノ秒の間隔数を示します。以下にDateTimeオブジェクトをスケール数で初期化します。

DateTime dt = new DateTime(636370000000000000); 
DateTime.MinValue.Ticks;  //ticksの最小値
DateTime.MaxValue.Ticks; // ticksの最大値

DateTimeの静的フィールド

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)

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をStringに変換する

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());

文字列をDateTimeに変換します。

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} は有効な日付文字列ではありません");