解决办法:
创建表示当前时间或日期的TimeOnly 或DateOnly 对象的方法是使用FromDateTime 静态方法和DateTime.Now。比如:
TimeOnly now = TimeOnly.FromDateTime(DateTime.Now);
DateOnly today = DateOnly.FromDateTime(DateTime.Now);
如果这是您在项目中反复需要的东西,为了避免重复,您可以在DateTime 上创建扩展方法,将DateTime 实例转换为TimeOnly 或DateOnly:
public static class DateTimeExtensions
{
public static TimeOnly ToTimeOnly(this DateTime dateTime)
{
return TimeOnly.FromDateTime(dateTime);
}
public static DateOnly ToDateOnly(this DateTime dateTime)
{
return DateOnly.FromDateTime(dateTime);
}
}
用法:
TimeOnly now = DateTime.Now.ToTimeOnly();
DateOnly today = DateTime.Now.ToDateOnly();
请注意,这不仅可用于将 当前 日期或时间设为 TimeOnly 或 DateOnly,还可用于将 DateTime 的任何实例转换为 TimeOnly 或 @987654338 @。
另一种方法是使用两个静态类,如下所示:
public static class TimeOnlyHelpers
{
public static TimeOnly Now => TimeOnly.FromDateTime(DateTime.Now);
}
public static class DateOnlyHelpers
{
public static DateOnly Today => DateOnly.FromDateTime(DateTime.Now);
}
用法:
TimeOnly now = TimeOnlyHelpers.Now;
DateOnly today = DateOnlyHelpers.Today;
为什么DateOnly 和TimeOnly 上没有一个简单的属性?
this GitHub issue 中讨论了为什么没有向这些结构中添加 Now 或 Today 属性的原因。
简而言之,他们不想在DateOnly 和TimeOnly 中引入时区和所有内容,因为这会增加额外的复杂性,因此他们决定不这样做,并保持新结构简单明了。
关于是否可以将这样的属性添加到Clock 类(仍然是一个建议,您可以遵循它here)有一些讨论,以便使用类似于TimeOnly now = SystemClock.Local.Now,或DateOnly 之类的DateOnly today = SystemClock.Local.Today 或类似的东西。但这还没有决定。