日付/時刻オブジェクトを生成する
現在の日時/時刻から生成する
現在の日付/時刻を取得するには、DateTime.Nowプロパティにアクセスします。
今日の日付のみを取得する場合は、DateTime.Todayプロパティにアクセスします。(このプロパティは時刻は含まれません)
Console.WriteLine(DateTime.Now);
Console.WriteLine(DateTime.Today);
指定した年月日、時分秒から生成する
new 演算子で年月日、時分秒を指定することでDateTime構造体を生成する方法もあります。
Console.WriteLine(new DateTime(2022, 2, 15, 13, 17, 23));//秒まで指定する場合
Console.WriteLine(new DateTime(2022, 2, 15));//日付のみ指定する場合:時間は00:00:00が設定される
Console.WriteLine(new DateTime(23,10,15));//時刻のみ設定することは出来ない
日付/時刻文字列から変換する
string dt1 = "2022/02/15 13:17:23 ";
Console.WriteLine(DateTime.Parse(dt1));
これはdt1の文字列を日付に変換したものですが、文字列に変換できないものが入力された場合、例外が発生します。そこで変換に失敗した時に例外が発生しないようにする場合は、DateTime.TryParseメソッドを利用します。
string dt1 = "2022/02/15 13:17:23 ";
Console.WriteLine(DateTime.TryParse(dt1, out DateTime dt2));//変換に成功した場合
Console.WriteLine(dt2);//DateTime文字列が表示される
string dt3 = "20220205131723";
Console.WriteLine(DateTime.TryParse(dt3, out DateTime dt4));//falseが帰ってくる場合
Console.WriteLine(dt4);//DateTimeの初期値である0001/01/01 00:00:00が表示される
任意の書式文字列から取得する
任意の文字列からDateTimeを取得することも出来ます。その場合、ParseメソッドではなくParseExactメソッドを使用します。(TryParseExactメソッドでも可)
using System.Globalization;
string str1 = "20220215131723";
DateTime dt1 = DateTime.ParseExact(str1, "yyyyMMddHHmmss", new CultureInfo("ja-JP"));
string str2 = "2022/02/13 13:17:23";
DateTime.TryParseExact(str2, "yyyyMMddHHmmss", new CultureInfo("ja-JP"), DateTimeStyles.None ,out DateTime dt2);
Console.WriteLine(dt1);// 2022/02/15 13:17:23と表示される
Console.WriteLine(dt2);// 0001/01/01 00:00:00と表示される(変換に失敗している)
年月日、時刻情報をDateTime構造体から取得する
DateTime構造体から以下のプロパティを用いて値を取り出すことが出来ます
プロパティ | 概要 |
Year | 年 |
Month | 月 |
Day | 日 |
DayOfWeek | 曜日 |
DayOfYear | 年初からの日数 |
Hour | 時 |
Minute | 分 |
Second | 秒 |
DateTime dt = new DateTime(2024, 10, 15, 15, 18, 20);
Console.WriteLine($"本日は{dt.Year}年{dt.Month}月{dt.Day}日{dt.Hour}時{dt.Minute}分{dt.Second}秒です");//本日は2024年10月15日15時18分20秒です と表示される
日付/時刻値を整形する
ToStringメソッドを使用することで出力したい文字列に変換します。
ToStringメソッドに設定する引数は任意ですが、設定する場合、以下の表にあるように決められた指定子を設定します。
指定子 | 概要 | 例 |
d | 短い形式の日付 | 2022/02/15 |
D | 長い形式の日付 | 2022年2月15日 |
f | 完全な形式の日付(時刻は短い形式) | 2022年2月15日 16:15 |
F | 完全な形式の日付(時刻は長い形式) | 2022年2月15日 16:15:40 |
g | 一般的な形式の日付(時刻は短い形式) | 2022/02/15 16:15 |
G | 一般的な形式の日付(時刻は長い形式) | 2022/02/15 16:15:40 |
t | 短い形式の時刻 | 16:15 |
T | 長い形式の時刻 | 16:15:40 |
指定子 | 概要 | 例 |
d | 日(1~31) | 2 |
dd | 日(01~31 | 02 |
ddd | 曜日の省略形(月、火、) | 火 |
dddd | 曜日の完全形(月曜日、火曜日、) | 火曜日 |
h | 12時間形式の時間(1~12) | 1 |
hh | 12時間形式の時間(01~12) | 01 |
H | 24時間形式の時間(1~24) | 13 |
HH | 24時間形式の時間(01~24) | 13 |
m | 分(0~59) | 2 |
mm | 分(00~59) | 02 |
M | 月(1~12) | 3 |
MM | 月(01~12) | 03 |
s | 秒(0~59) | 23 |
ss | 秒(00~59) | 23 |
tt | AM/PM | 午後 |
y | 年(0~99) | 22 |
yy | 年(00~99) | 22 |
yyyy | 年(4桁の数字) | 2022 |
日付を加算/減算する
DateTime構造体のAddXxxxxメソッドを使用する場合
日付/時刻を加算/減算する場合にはAddXxxxメソッドを使用します。Xxxxxには演算する要素であるYears/Months/Days/Hours/Minuts/Secondsが入ります。
DateTime dt = new DateTime(2024, 10, 15, 15, 18, 20);
Console.WriteLine(dt.AddYears(10));//2034/10/15 15:18:20
Console.WriteLine(dt.AddMonths(-3));//2024/07/15 15:18:20
Console.WriteLine(dt.AddDays(4));//2024/10/19 15:18:20
Console.WriteLine(dt.AddHours(25));//2024/10/16 16:18:20
Console.WriteLine(dt.AddMinutes(-30));//2024/10/15 14:48:20
Console.WriteLine(dt.AddSeconds(50));//2024/10/15 15:19:10
TimeSpan構造体を用いて演算をする場合
TimeSpan構造体は以下の様に作成します
TimeSpan tp1 = new TimeSpan(3,15,30,0);//3日15時間30分
TimeSpan tp2 = new TimeSpan(15,12,12);//15時間12分12秒
DateTime dt = new DateTime(2024,10,15,13,15,20);
Console.WriteLine(dt.Add(tp1));//2024/10/19 4:45:20
Console.WriteLine(dt.Subtract(tp2));//2024/10/14 22:03:08
TimeSpan構造体を作成する場合には3つの引数と4つの引数を取るものがありますが、3つの場合、
(時間、分、秒)の組み合わせで解釈されます。
また、4つの引数を取るものは(日、時間、分、秒)の組み合わせとなります。
2つのDateTime構造体の差分を取得する
DateTimeオブジェクト同士の差分を取る場合にはSubtractメソッドを使用します。
この場合、引数がDateTimeオブジェクトで、戻り値がTimeSpanオブジェクトとなります。
DateTime dt1 = new DateTime(2024, 10, 15, 13, 15, 20);
DateTime dt2 = new DateTime(2024, 10, 18, 11, 16, 40);
TimeSpan tp = dt1.Subtract(dt2);
Console.WriteLine(tp);//-2.22:01:20
まとめ
今回は日付、時刻及びその演算方法、また表示方法について学びました。
特に日付、時刻の表示方法で使用するToStringメソッドの引数に指定するフォーマットは必ず習得するようにしてください。
コメント