NodaTime的Instant.Now我正在尝试让JonSkeet(以及其他人)使用NodaTime框架。我现在正在尝试存储当前(即时)。Instant是从长时间尺度创建的,但是现在Ticks的数量是多少?是不是:Instantnow=newInstant(DateTime.Now.ToUniversalTime().Ticks);或者?Instantnow=Instant.FromDateTimeUtc(DateTime.Now.ToUniversalTime());它们是否相同,我什至做对了吗?PS,如果Jon回答了这个问题——我想提议一个Instant.Now属性。PS2我知道标题包含一个标签,但它不会让我有一个简短的“Instant.Now”标题。我做了一些研究,似乎NodaTime的方式是根据时钟获取当前时刻。如果您想使用系统时钟获取当前时间,只需使用SystemClock.Instance.GetCurrentInstant()。但是,与其在代码中直接使用SystemClock.Instance,不如在时间感知类中注入IClock依赖项。这将使您能够:我发现这非常有用。我认为使用newInstant()或Instant.Now之类的东西返回当前时间会使硬编码SystemClock的使用变得更容易,从而失去了NodaTime提供的测试优势。有关使用NodaTime进行单元测试的更多信息,请参阅此链接。关于您的代码示例:它们不等效。SystemClock.Now将当前时间作为Instant值返回:Instantnow=SystemClock.Instance.Now;但是您可能需要注意IClock接口文档中的IClock:IClock可以在您需要访问当前时间的任何地方使用。虽然直接调用SystemClock.Instance.Now并不严格,就像调用UtcNow一样,但强烈建议不要将其作为生产代码的样式。我们建议为任何需要它的地方提供一个IClock实例,这允许您使用NodaTime.Testing程序集(或您自己的实现)中的存根时钟编写测试。作为一个简单的例子,假设您有一个需要当前时间的Logger类。不要直接访问SystemClock,而是使用通过其构造函数提供的IClock实例:publicclassLogger{privatereadonlyIClockclock;publicLogger(IClockclock){this.clock=clock;}publicvoidLog(stringmessage){Instanttimestamp=this.clock.Now;//现在记录带有时间戳的消息...}}在生产代码中实例化Logger时,您可以为其提供SystemClock.Instance。但是在Logger类的单元测试中,可以给它一个FakeClock。以上就是C#学习教程:Instant.Now就是NodaTime分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
