.NET 6 から新しく、System.DateOnly
と System.TimeOnly
という構造体が追加された
これらは DateTime
の日付部分と時刻部分のみをもつ構造体とのこと
公式ドキュメント
System.DateOnly
DateOnly 構造体
https://docs.microsoft.com/ja-jp/dotnet/api/system.dateonly
0001 年 1 月 1 日から 9999 年 12 月 31 日までの範囲の値を含む日付を表します
System.TimeOnly
TimeOnly 構造体
https://docs.microsoft.com/ja-jp/dotnet/api/system.timeonly
00:00:00 から 23:59:59.9999999 の範囲内で、クロックから読み取る時刻を表します
所感
.Net6 以前から時間をあらわす構造体として DateTime や、 DateTimeOffsetがあったが
そのどちらもが日時両方を持っており
日時のみ、時間のみの構造体は以外にも今回が初のようだった
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 DateOnly DateonlyStruct = DateOnly.FromDateTime(DateTimeStruct); // 2022/01/01 TimeOnly TimeOnlyStruct = TimeOnly.FromDateTime(DateTimeStruct); // 22:22
名前の通り、DateOnly
では年月日が、TimeOnly
では時分秒のみが取得できている
文字列からParceすると"2022/01/01 22:22:32"のような値の変換には失敗するので、
一度、DateTime型にして、そのあとに
FromDateTimeを使用するとDateTimeからの変換に成功する ようだ