【问题标题】:DateTime - Determine mensiversary (monthly anniversary)DateTime - 确定月经(每月纪念日)
【发布时间】:2013-09-06 02:22:11
【问题描述】:

所以我只有一个 CreatedDate 可以使用。

我有一个每天午夜 12 点运行的计划任务,它需要获取该月同一天的所有记录(但如果 CreatedDate == DateTime.Now,则不需要)。

我希望它在 LINQ 中,因为这是一个数据库调用,但我认为任何迭代逻辑都足够了。

我现在有这个,但是天数超过 28 天时会出现问题:

var results = Context.Subscriptions.Where(
                x => !(x.StartDate.Day == DateTime.Now.Day &&
                      x.StartDate.Month == DateTime.Now.Month &&
                      x.StartDate.Year == DateTime.Now.Year) && 
                     x.StartDate.Day == DateTime.Now.Day);

为了清楚起见更新问题:

例如,一条记录的创建日期是 2013 年 1 月 31 日。这条记录应该每个月都被拉取。但由于并非所有月份都有 31 天,所以我上面的代码在这些月份不起作用。即使那个月没有31号,我仍然需要每个月拉记录。

【问题讨论】:

  • 到目前为止你已经走了多远?发表您的最大努力以及您认为解决问题的最佳方法。
  • 那么 31 日的记录仅在 12 个月中的 7 个月内被提取?什么时候应该拉出来?
  • 发布了我现在所拥有的。到目前为止,如果开始日落在 29、30 或 31 日,它们将不会每个月都被拉取。我猜他们应该在第二天被拉走?例如,如果记录的创建日期是 31 日,而当月只有 30 天,则记录应该在下个月的 1 日被拉出。如果这不是最佳解决方案,我非常愿意接受其他答案。
  • @Kablitz 为什么第一个要从第 30 个或第 31 个提取记录?它应该从一开始就拉记录,不是吗?或者您是否需要 1st 也生成上个月不存在的第 29-31 天的所有剩余报告?

标签: c# linq datetime


【解决方案1】:

只是一个想法,也许您可​​以利用 Windows 服务来运行计划任务,但 .net 中还有另一种方式的任务计划程序。如果您要使用 Windows 服务,可以使用计时器类进行重复运行。 如果你有一个任务表,你可以有intervaldatetime、datelastrundatetime 和nextjobdatetime 的列。在这里,您可以检查它将运行的时间间隔,并检查要运行或不应该运行的作业/任务的日期时间。

查看此以获取更多信息: http://msdn.microsoft.com/en-us/magazine/cc163821.aspx

希望对你有帮助。

【讨论】:

  • 我已经想到了类似的东西(intervaldatetime、datelastrundatetime 和 nextjobdatetime)。但是这些数据是从外部服务中提取的,如果可能的话,我们希望避免这种情况。另外,我的上级不想将这些列添加到我们的数据库中,原因我不知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多