2017-03-26 7 views
1

Iドメインロジックにヘルパー機能を有している。なぜDateTimeOffset.AddMonths((DTO)=> dto.AddMonths(1).Date)として(1).Date同じではない

private static DateTimeOffset CalculateNextDate(DateTimeOffset previousDate, TimeUnit timeUnit, int quantity) 
{ 
    Func<int, DateTimeOffset, DateTimeOffset> calcMethod; 
    switch (timeUnit) 
    { 
     case TimeUnit.Month: 
      calcMethod = (i, offset) => offset.AddMonths(i); 
      break; 
     // ... [irrelevant] ... 
     default: 
     // ... [irrelevant] ... 
    } 
    return calcMethod(quantity, previousDate).Date; 
} 

私のunittestのは、例えば、月を検証してみました:

// Arrange 
    int monthsToAdd = 1; 
    var timeUnit = TimeUnit.Month; 
    var sut = new TimeInterval(timeUnit, monthsToAdd); 
    var now = DateTimeOffset.Now; 

    // Act 
    var result = sut.NextDate(now); 

    // Assert 
    var expectedDate = now.AddMonths(1).Date; 
    Assert.AreEqual(expectedDate, result); // FAILS 

結果は1がKEEことができる理由私は理解していない{26/04/2017 0:00:00 +02:00}

ている間expectedDateが{26/04/2017 0:00:00}であるため、アサートが失敗しますpはオフセットで、もう一方はオフセットします。私は.DateをDateTimeOffsetにキャストしているのですか? MSDNの説明を見つけることができません...

答えて

2

DateTimeOffset.Date page on MSDNを見てみましょう:

このプロパティを唯一の重要な日付コンポーネントのDateTimeOffsetオブジェクトを返すから時間コンポーネントのいずれかの重要な部分を削除します。 たとえば、DateTimeOffsetオブジェクトの日付と時刻の値が "1/12/07 4:01 pm +7:30"の場合、プロパティはDateTimeの値を "1/12/07 12:00:00 AM"。 DateTime値は、日付のみを表示する標準書式指定子またはカスタム書式指定子のいずれかを使用して表示できます。

返されるDateTimeオブジェクトのDateTime.Kindプロパティの値は、常にDateTimeKind.Unspecifiedです。 Offsetプロパティの値の影響を受けません。

DateTimeOffset Constructor (DateTime) page on MSDNを参照してください。

このコンストラクタの動作は、dateTimeのパラメータのDateTime.Kindプロパティの値によって異なります。

  • DateTime.Kindの値がある場合DateTimeKind.Utc、新しいインスタンスのDateTimeプロパティはdateTimeと等しく設定され、Offsetプロパティは0に設定されます。
  • DateTime.Kindの値がDateTimeKind.LocalまたはDateTimeKind.Unspecifiedの場合、新しいインスタンスのDateTimeプロパティはdateTimeに設定され、Offsetプロパティはローカルシステムの現在のタイムゾーンのオフセットに設定されます。

したがって、Dateプロパティを使用してDateTimeに変換することによって、あなたは、時間成分を除去しますが、オフセットとKindを除去します。

DateTimeOffsetからDateTimeに変換して暗黙的にDateTimeOffsetにキャストすると、現在のタイムゾーンでの時刻とみなされます。

+0

これだけです!私はコンストラクタの説明を見落としました。 – dampee

関連する問題