Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NodaTime:复制日期时间。今天_C#_Unit Testing_Datetime_Nodatime - Fatal编程技术网

C# NodaTime:复制日期时间。今天

C# NodaTime:复制日期时间。今天,c#,unit-testing,datetime,nodatime,C#,Unit Testing,Datetime,Nodatime,我的服务从外部服务请求数据,该服务需要特定日期的参数(不需要时间信息) 到目前为止,我一直使用DateTime.Today(例如2014年10月24日12:00:00) 我已经开始使用NodaTime来提高可测试性,但不确定复制此功能的最佳方式: public class SomeClass(IClock clock) { _clock = clock; //Injected at runtime, provides mockable interface var localNo

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

到目前为止,我一直使用DateTime.Today(例如2014年10月24日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
}

要表示日期,最好使用
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还没有准备好发布,但我想告诉你接下来会发生什么。

3,2,1,0…JS将神奇地出现@阿德里亚诺雷佩蒂:已经在写我的答案了:)谢谢乔恩。我是公司里第一个加入野田佳彦潮流的人,所以每个人都在使用普通的ole日期时间。不过,很高兴听到2.0的变化。就像很多事情一样,野田佳彦在你全神贯注的时候是很棒的,但是当你离开围墙花园的时候,事情会变得有点不稳定。尽管如此,我还是喜欢这个图书馆@Killnine:您可以考虑将扩展方法添加到<代码> IcLoC< <代码>中,例如“代码> DATESTATE GETCurrNDATE日期(此ICROCK时钟,DATETMETZORE区域)< /代码>。