なんかいろいろと書いてくブログ

関東のどこかで働く、一般人

【C#】System.DateOnly と System.TimeOnly

.NET 6 から新しく、System.DateOnlySystem.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からの変換に成功する ようだ