1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C#の基本イディオムについてその6~DateTime構造体~

Last updated at Posted at 2021-07-28

C#での日時・時間の設定・取得をできるDateTime構造体についてまとめた。

DateTimeに値を設定する

DateTimeには、
・年
・月
・日
・時
・分
・秒
・1/1000秒(ミリセカンド)
の値をセットすることができる

var date1 = new DateTime(2007, 7, 7);
DateTime date2 = new DateTime(2011, 1, 1, 11, 3, 5);
var date3 = new DateTime(2000, 1, 1, 12, 24, 36, 123);
出力結果
7/7/2007 12:00:00 AM  // date1
1/1/2011 11:03:05 AM // date2
1/1/2000 12:24:36 PM // date3

○年月日をセットすると、「セットした年月日 + 時間は午前12時」を返す。
○年月日と時分秒をセットすると、「セットした年月日 + セットした時分秒」を返す。
※時間は24時間単位でセットするのだが、返ってくる値は、「12時間単位 + AMかPM」
(例)
時→9、分→5、秒→1
なら、「9:05:01 AM」というように返ってくる。
なぜか、時だけ、0埋めされない。
そして、ミリセカンドはセットしても、時間には表示されない。

また、時分秒を入れる場合は、全部セットしないといけない。
不思議なのが、年月日だけ日、月、年の順で表示される。

以下の書き方は構文エラーになる
var date3 = new DateTime(2007, 7, 7, 1);  // 分と秒がセットされていない
var date4 = new DateTime(2007, 7, 7, 1, 1); // 秒がセットされていない

「今」と「今日」を取得する場合は特殊

var now = DateTime.Now;
var today = DateTime.Today;
7/28/2021 9:51:57 PM  // now
7/28/2021 12:00:00 AM // Today

Nowの場合、今の日付と今の時間を返す。
Todayの場合、今の日付を返すが、時間は「12:00:00 AM」を返す。

DateTime構造体のプロパティ

DateTime構造体はいくつかプロパティを持っている。

var date3 = new DateTime(2000, 1, 1, 12, 24, 36, 123);
date5.Year; // 年 2000
date5.Month; // 月 1
date5.Day; // 日 1
date5.Hour; // 時 12
date5.Minute; // 分 24
date5.Second; // 秒 36
date5.Millisecond; // 1/1000秒 123

ただし、上記のプロパティは読み取り専用なので、値を書き換えることはできない。

構文エラー
date5.Hour = 21;

「CS0200: Property or indexer 'DateTime.XXXX' cannot be assigned to -- it is read only (CS0200) (xxxxxxxxxxx)」という「読み取り専用の値は変更ができない」といった旨の構文エラーになる。

曜日を取得する

date3.DayOfWeek; // Saturday

曜日は英語で返ってくる。

うるう年かどうかを判定する

なんと、C#の日時操作には、年がうるう年かどうかを判定するメソッドがある。

DateTime.IsLeapYear(2016); // True
DateTime.IsLeapYear(2018); // False

文字列からDateTimeのオブジェクトを作成する

この場合は、DateTime構造体に含まれている静的メソッドであるTryParseを使用する。
また、TryParseメソッドで値が変換されれば、Trueが返り、変換ができないと例外が発生する。

第一引数に変換する日時の文字列、第二引数にoutキーワード付きのDateTime型の変数を指定する。

Console.WriteLine(date2);
// この時点では、「1/1/2011 11:03:05 AM」が返ってくる

// date2はDateTime型なので、変換され、Trueが返るので条件を満たす。
if(DateTime.TryParse("2020/1/1 14:15:30", out date2)) { 
   Console.WriteLine(date2);
     // この時点で、「2020/1/1 2:15:30  PM」が返ってくる
}
出力結果
1/1/2011 11:03:05 AM
1/1/2020 2:15:30 PM

DateTime型の変数をフォーマットを指定して文字列に変換する

var date3 = new DateTime(2000, 1, 1, 12, 24, 36);
date3.ToString("d"); // 1/1/2000
date3.ToString("D");  // Saturday, January 1, 2000
date3.ToString("yyyy-MM-dd") // 2000-01-01
date3.ToString("yyyy年MM月dd日(ddd)"); // 2000年01月01日(Sat)
date3.ToString("HH時mm分ss秒"); // 12時24分36秒
date3.ToString("f"); // Saturday, January 1, 2000 12:24 PM
date3.ToString("F"); // Saturday, January 1, 2000 12:24:36 PM
date3.ToString("t"); // 12:24 PM
date3.ToString("T"); // 12:24:36 PM

※フォーマットについてはいろいろある。

参考文献

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?