C# 如何将句点移到比较的另一边?
说到s,C# 如何将句点移到比较的另一边?,c#,.net,period,nodatime,C#,.net,Period,Nodatime,说到s,-不应该是+的倒数:3月31日加上一个月就会产生4月30日。从4月30日减去一个月,得到的是3月30日,而不是3月31日 我有一个涉及句点的数据库记录过滤器: priorDate + period < today 这允许将比较从客户端移动到数据库:它允许我避免检索所有记录而丢弃不符合条件的记录 如果该期间涉及数月或数年,我该怎么做 我可以假设公历,期间为非负数。(特别是:我可以假设priorDate+period>=priorDate的所有值都是priorDate,但如果可能的话
-
不应该是+
的倒数:3月31日加上一个月就会产生4月30日。从4月30日减去一个月,得到的是3月30日,而不是3月31日
我有一个涉及句点的数据库记录过滤器:
priorDate + period < today
这允许将比较从客户端移动到数据库:它允许我避免检索所有记录而丢弃不符合条件的记录
如果该期间涉及数月或数年,我该怎么做
我可以假设公历,期间
为非负数。(特别是:我可以假设priorDate+period>=priorDate
的所有值都是priorDate
,但如果可能的话,我还不排除“一个月减去一天”的周期。)
如果我有一个月的期限,今天是4月30日,那么我想计算一下表达式应该变成priorDate
,这很简单:这就是今天-period
产生的结果
如果我有一个月的期限,今天是2018年3月30日,那么
今天-period
将产生2月28日,但是表达式应该变成3月1日的比较:如果priorDate
正好是新的LocalDate(2018,2,28)
,那么priorDate+period
将为真,但是priorDate
将为假。给定LocalDate
值d
和期间p
:
如果p
仅包括月份或年份:
- 如果对
p
进行简单的加减操作会产生一个无效的日期,则结果会减少到月末。结果日期永远不会“向上舍入”到下个月。它的年/月组成部分将按照p
中指定的金额精确增加。因此:
d-p
将产生最低的x
,从而x+p==d
,如果存在这样的x
在这种情况下,v+p
相当于v
- 否则,
d-p
将产生最大的x
,从而x+p
在这种情况下,v+p
相当于v根本不清楚你在问什么。首先,这些是什么数据类型。下一步-为了安全起见,请始终明确您的优先需求,即执行priorDateTime<(现在-期间)
@pm100我已标记了此[nodatime],但现在已编辑为包含链接。括号显然不会有任何区别。你需要时间(小时-分钟)信息还是天数足够好?@FrancescoB。我认为几天就足够了,但老实说,我还不能完全确定。
priorDate < today - period
LocalDate F(Period period, LocalDate refDate)
{
var result = refDate - period;
if (result + period != refDate)
result += Period.FromDays(1);
return result;
}
LocalDate G(Period period, LocalDate refDate)
{
var result =
refDate
- new PeriodBuilder {Weeks = period.Weeks, Days = period.Days}.Build()
- new PeriodBuilder {Years = period.Years, Months = period.Months}.Build();
if (result + period != refDate)
result += Period.FromDays(1);
return result;
}