Mic*_*l A 2 .net c# datetime date
我有一个从数据库加载配置的对象.我存储上次使用日期时间字段(被调用GroupsLastRun)运行作业的时间,并且我存储了作业应该使用调用的字符串字段运行的频率Captureusersandgroups.Captureusersandgroups存储三种不同类型'DAILY','WEEKLY'和'MONTHLY'.
基本上,我只有在作业运行时才能继续循环.到目前为止,我已经达到了以下几点:
if (configEntity.GroupsLastrun > DateTime.Now.AddDays(-1) && configEntity.Captureusersandgroups == "DAILY") continue;
if (configEntity.GroupsLastrun > DateTime.Now.AddDays(-7) && configEntity.Captureusersandgroups == "WEEKLY") continue;
if (configEntity.GroupsLastrun > DateTime.Now.AddDays(-30) && configEntity.Captureusersandgroups == "MONTHLY") continue;
Run Code Online (Sandbox Code Playgroud)
我确信(确定)有一个更好的方法,但主要是一个SQL Server开发人员,我缺乏批判性思维/工具来接近这个.什么是更好的方法或我应该学习什么,所以我可以更好地考虑这个?
几点:
DateTime.UtcNow而不是DateTime.Now(并确保您也存储 UTC值)所以,我有这样的代码:
// Consider whether you actually want DateTime.UtcNow.Date
DateTime now = DateTime.UtcNow;
DateTime deadline;
switch (configEntity.Captureusersandgroups)
{
case "DAILY": deadline = now.AddDays(-1);
case "WEEKYLY": deadline = now.AddDays(-7);
case "MONTHLY": deadline = now.AddMonths(-1);
// I'm assuming there's *always* a schedule
default: throw new InvalidOperationException("Invalid schedule");
}
if (configEntity.GroupsLastrun > deadline)
{
continue;
}
Run Code Online (Sandbox Code Playgroud)
请注意,从"now"减去一个月与从"then"添加一个月不同.例如,如果最后一次运行是在1月30日,那么下一次运行将不会在3月1日之前使用上述代码 - 而如果您在1月30日添加了一个月,那么接下来将在2月28日运行(除非您使用两个值的日期).仔细考虑您想要的行为.
(作为一个快速插件,我显然也建议考虑我的Noda Time库来进行日期/时间工作.它可以更清楚地表明任何特定值是本地时间还是某个时区等)
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |