我的服务从需要特定日期参数的外部服务请求数据(不需要时间信息)。
到现在为止,我一直在使用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
}
答案 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尚未准备好发布,但我想让你知道即将发生的事情。