使用“Ticks”能够用DateTime进行计算,这有什么问题吗?

问题描述 投票:0回答:2

我的一个表格有一个

FinishDate
列,定义为
DatTime?
(注意问号),所以我决定按如下方式工作,以检查该字段是否已填写以及日期是否超过一年前:

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

作为错误消息,我得到“年、月和日参数描述了无法表示的日期时间”。

我只是想检查

FinishDate
和现在相减的蜱虫数量是否大于一年中的蜱虫数量。

我该怎么做?

c# datetime
2个回答
1
投票

C# 中没有

0
月份和日期,最小
DateTime
new DateTime(1,1,1)
,但只需使用
default
DateTime.MinValue
。例如:

var minTicks = new DateTime.MinValue.Ticks;

另请注意,您可以直接比较

DateTimes

if (finish > DateTime.Now.AddYears(-1)) // updated from comments to the question

0
投票

具有三个 int 参数的

DateTime
的构造函数用于表示年、月和日(错误也说明了这一点)。但你提供了1,0,0。那不是有效值。我不知道你为什么比较刻度,为什么不直接比较
DateTimes
?您还可以减去
DateTimes
并得到
TimeSpan
作为结果,其具有
Ticks
属性。

TimeSpan passed = DateTime.Now - finish;
if(passed > TimeSpan.FromDays(365))
{
    // ...
}

请注意,这是假设一年有 365 天。所以你有一个闰年问题。如果是这样你需要这样计算:

DateTime now = DateTime.Now;
TimeSpan year = now.AddYears(1) - now;
© www.soinside.com 2019 - 2024. All rights reserved.