我的一个表有一个FinishDate列,定义为DatTime?(请注意问号),因此我决定执行以下操作,以判断该字段是否已填写,以及日期是否长于一年前:

DateTime finish = to.FinishDate == null? DateTime.Now : (DateTime) (to.FinishDate);
if (DateTime.Now.Ticks - finish.Ticks > new DateTime(1,0,0).Ticks)

作为一条错误消息,我得到"Year、Month和Day参数描述了一个不可表示的日期时间".

我只是想判断一下减go FinishDate和现在的刻度数是否大于一年的刻度数.

我怎么能做到这一点?

推荐答案

.NET的DateTime中没有0个月和日,最小的DateTimenew DateTime(1,1,1),而只是使用defaultDateTime.MinValue.例如:

var minTicks = new DateTime.MinValue.Ticks;

但您只能比较它们之间的DateTimes,所以要处理"FinishDate-Now>;1 Year"大小写,您可以使用(考虑两边都使用UTC时间,即DateTime.UtcNow):

if (finish > DateTime.Now.AddYears(-1)) // updated from the comment by vc74

Csharp相关问答推荐

更改对象的旋转方向

以自动方式注销Azure身份应用程序

数组被内部函数租用时,如何将数组返回给ArrayPool?

使用客户端密钥为Fabric Rest API生成令牌

如何分配对象后的class的属性?

限制特定REST API不被访问,但部署代码

mocking对象的引发事件并作为用于调用方法的参数对象传递到那里

CS1660无法将lambda表达式转换为类型INavigationBase,因为它不是委托类型

C# CompareTo()和Compare()可以返回除-1和1以外的整数吗?

C#Null判断处理失败

VS 2022 for ASP.NET Core中缺少自定义项模板

Celler ArgumentExpression是否期望在所有情况下都捕获允许空值的运算符?

如何强制新设置在Unity中工作?

我应该为C#12中的主构造函数参数创建私有属性吗?

C#System.Commandline:如何向命令添加参数以便向其传递值?

NETSDK1201:对于面向.NET 8.0和更高版本的项目,默认情况下,指定RUNTIME标识符将不再生成自包含的应用程序

在C#中通过Matheval使用自定义公式

Xamarin.Forms项目中缺少MainPage.xaml

同时通过多个IEumable<;T&>枚举

从列表中跳过和获取条目的优雅方式