gpt4 book ai didi

c# - 如果一整年过去了,则运行代码

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:49 24 4
gpt4 key购买 nike

我想每年根据用户创建帐户的日期向用户发送一封电子邮件。

我目前有代码用于检查自上次登录以来是否已经过去了几个月,并且想知道是否可以修改它,代码如下所示:

public static int GetMonthsBetween(DateTime from, DateTime to)
{
if (from > to) return GetMonthsBetween(to, from);

var monthDiff = Math.Abs((to.Year * 12 + (to.Month - 1)) - (from.Year * 12 + (from.Month - 1)));

if (from.AddMonths(monthDiff) > to || to.Day < from.Day)
{
return monthDiff - 1;
}
else
{
return monthDiff;
}
}

if (GetMonthsBetween(lastLoginDate, currentDate) >= 4)

我只想在自创建日期起满一年后发送电子邮件,我该怎么做?

最佳答案

在我看来,正确的方法是更改​​您的设计 - 与其询问一个日期与另一个日期之间的月份,您应该将相关的月份数添加到原始 DateTime。您根本不需要辅助方法:

if (lastLoginDate.AddMonths(4) >= currentDate)

或者一年:

if (lastLoginDate.AddYears(1) >= currentDate)

.NET 中没有表示天、月等“周期”的类型 - 您可能需要考虑我的 Noda Time图书馆。那时你可以:

private static readonly Period LoginExpiredPeriod = ...;

...

// Assuming lastLoginDate and currentDate are LocalDate values
if (lastLoginDate + period >= currentDate)
{
...
}

您需要注意月份和年份的影响是可变长度的 - 例如,“2016 年 2 月 29 日 + 1 年”在 Noda 时间是 2017 年 2 月 28 日......但是您可能 例如,想使用 2017 年 3 月 1 日。基本上要小心。

关于c# - 如果一整年过去了,则运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42974823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com