.NET 6 から新しく、System.DateOnly と System.TimeOnlyという構造体が追加された これらは DateTime の日付部分または時刻部分のみをもつ構造体とのことで
時間の差分を見るようなときに使いそうな気がするので調べてみた
公式ドキュメント
System.DateOnly
https://docs.microsoft.com/ja-jp/dotnet/api/system.dateonly
System.TimeOnly
https://docs.microsoft.com/ja-jp/dotnet/api/system.timeonly
DateTime、DateTimeOffsetとの比較
string date = "2022/01/01 22:22:32"; DateTime DateTimeStruct = DateTime.Parse(date); // 2022/01/01 22:22:32 DateTimeOffset DateTimeOffsetStruct = DateTimeOffset.Parse(date); // 22:22:32 +09:00 // "2022/01/01 22:22:32"での形式はParceに失敗する //DateOnly DateonlyStruct = DateOnly.Parse(date); DateOnly DateonlyStruct = DateOnly.Parse("2022/01/01"); // 2022/01/01 //DateOnly DateonlyStruct = DateOnly.Parse(date); TimeOnly TimeOnlyStruct = TimeOnly.Parse("22:22:32"); // 22:22
確かに、なまえの通り年月日または時間のみが格納されている
しかし、'"2022/01/01 22:22:32"' のような文字列をDateOnlyやTimeOnlyにParseしようとすると
Formatのエラーで怒られる
また、DateTimeやDateTimeOffsetからの変換するメソッド見当たらなく、 (これは私が見落としているだけかもしれない)
実際にこれらの構造体を使用する際には 実装を少し考えなければならなさそうだ
また、DateOnlyとTimeOnlyともに差分計算のメソッドが実装されており 特にTimeOnlyに関しては 年月日を意識せずに時間の計算ができる