如何转换System.DateTime?System.DateOnly吗?



如何将可空的DateTime转换为可空的DateOnly?所以DateTime?DateOnly?

错误提示:

错误CS0029不能隐式转换类型"System.DateOnly"?"System.DateTime ?'

我可以从DateTime转换为DateOnly执行:

DateOnly mydate = DateOnly.FromDateTime(mydatetime);

但是空值呢?

我有一个方法,但我认为不是最好的主意。

让我们创建一个与FromDateTime完全相同的方法,只是作为DateTime的扩展调用:

public static DateOnly ToDateOnly(this DateTime datetime) 
=> DateOnly.FromDateTime(datetime);

现在可以使用空条件成员访问操作符?.将该方法提升为可空的版本:

var myNullableDateOnly = myNullableDateTime?.ToDateOnly();
不幸的是,c#没有"条件为空的静态方法调用操作符"。因此,我们需要这个"扩展方法的变通方法"。

您可以创建一个DateTime扩展方法:

public static class DateTimeExtends
{
public static DateOnly ToDateOnly(this DateTime date)
{
return new DateOnly(date.Year, date.Month, date.Day);
}
public static DateOnly? ToDateOnly(this DateTime? date)
{
return date != null ? (DateOnly?)date.Value.ToDateOnly() : null;
}
}

并在任何DateTime实例上使用:

DateOnly date = DateTime.Now.ToDateOnly();

注意:未测试,可能有提示错误…

public static DateOnly? ToNullableDateOnly(this DateTime? input) 
{
if (input == null) return null;
return DateOnly.FromDateTime(input.Value);
}

我只是创建了这个方法,如果有人有另一个更好的,我很乐意接受它作为答案

public DateOnly? NullableDateTime_To_NullableDateOnly(DateTime? input) {
if (input != null)
{
return DateOnly.FromDateTime(input ?? DateTime.Now); //this is irrelevant but...
}
return null;
}

相关内容

最新更新