首页 > 解决方案 > DateTime.Now 等效于 TimeOnly 和 DateOnly?

问题描述

.NET 6 / C# 10 引入了TimeOnlystructs DateOnly,分别只表示时间和日期。

好的旧DateTime结构总是有一个Now静态属性,它会给你当前的日期和时间。

我期望TimeOnlyDateOnly结构都具有相似的静态属性;喜欢TimeOnly.Nowor DateOnly.Today,但他们显然不喜欢。

那么,如果我想要一个DateOnly代表当前日期的TimeOnly对象,或者一个代表当前时间的对象,我该怎么办?

而且我还想知道为什么他们决定不在这两个新结构中包含这样的属性?

标签: c#.net.net-core.net-6.0

解决方案


你可以使用.FromDateTime()方法,

仅获取当前日期:

var dateNow = DateOnly.FromDateTime(DateTime.Now);

仅获取当前时间:

var timeNow = TimeOnly.FromDateTime(DateTime.Now);

更多细节,你可以通过Github issue。有几个很好的评论解释了为什么 .Now不引入属性DateOnlyTimeOnly

为什么.Today和属性.NowUtcNow没有引入DateOnly

  • @tarekgh 评论来看,dotnet 社区正试图保持与时区DateOnly 无关

@tarekgh的下一条评论解释了如果他们将这些属性引入DateOnly.


在阅读了 github 线程和其他一些文档之后,我觉得引入DateOnlyTimeOnly结构只是为了解耦DateTime.

Date日期和时间的这种解耦将有助于我们将来单独执行单独的计算Time

这将帮助我们在粒度级别上精确地设计模型类。


推荐阅读