NodaTime:复制DateTime.Today

时间:2014-10-24 14:57:25

标签: c# unit-testing datetime nodatime

我的服务从需要特定日期参数的外部服务请求数据(不需要时间信息)。

到现在为止,我一直在使用DateTime.Today(例如10/24/2014 12:00:00)。

我已经转而使用NodaTime来提高可测试性,但不确定复制此功能的最佳方法:

public class SomeClass(IClock clock)
{
    _clock = clock; //Injected at runtime, provides mockable interface

    var localNow = _clock.Now.InZone(_serverTimeZone);
    var today = localNow.ToDateTimeUnspecified().Date; //This close enough? Seems kinda long
}

1 个答案:

答案 0 :(得分:3)

要表示日期,您最好使用LocalDate而不是DateTime。所以你想要:

var localNow = clock.Now.InZone(serverZone);
var today = localNow.Date;

如果您必须使用DateTime,那么您当前的代码就可以了。

在Noda Time 2.0中,这将更简单,因为ZonedClock基本上是时钟和时区的组合,允许你写:

// Or whatever...
private readonly ZonedClock zonedClock = clock.InZone(zone);

// Then later

LocalDate date = zonedClock.GetCurrentDate();

野田时间2.0尚未准备好发布,但我想让你知道即将发生的事情。