创建仅包含月和日的日期时间,不包括年份

我在VS中为sharepoint创建一个计时器作业,我想创建一个只有月和日的Date对象。 这是因为我希望这份工作每年在特定日期开展。

如果使用日期对象是不可能的,那么你会怎么做呢?

这是我得到的:

DateTime value = new DateTime(2010, 1, 18); 

好吧,你可以创建自己的类型 – 但DateTime 总是有一个完整的日期和时间。 你甚至不能使用DateTime “只是约会” – 你最接近的是在午夜有一个DateTime

你可以随时忽略这一年 – 或者当前年份:

 // Consider whether you want DateTime.UtcNow.Year instead DateTime value = new DateTime(DateTime.Now.Year, month, day); 

要创建自己的类型,您可以始终在结构中嵌入DateTime ,并在AddDays等调用上代理:

 public struct MonthDay : IEquatable { private readonly DateTime dateTime; public MonthDay(int month, int day) { dateTime = new DateTime(2000, month, day); } public MonthDay AddDays(int days) { DateTime added = dateTime.AddDays(days); return new MonthDay(added.Month, added.Day); } // TODO: Implement interfaces, equality etc } 

请注意,您选择的年份会影响该类型的行为 – 2月29日是否应该是有效的月/日值? 这取决于年份……

我个人认为我不会为此创建一个类型 – 相反,我有一个方法可以返回“下次运行程序时”。

如何在下一个日期创建计时器?

在你的计时器回调中你创建了下一年的计时器? DateTime始终为年份值。 您想要表达的是经常性的时间规范。 这是您需要创建的另一种类型。 DateTime始终表示特定日期和时间,但不是重复日期。

没有一年没有像DateTime这样的东西!

从我收集到的你的设计有点奇怪:

我建议存储一个“开始”( DateTime包括第一次出现的年份)和一个指定如何计算下一个事件的值……这可能是一个TimeSpan或一些自定义结构esp。 因为“每年”可能意味着事件发生在特定日期,并且不会自动与说明它发生在+365天内相同。

事件发生后,您计算下一个并存储该等。

无论如何你需要’年’。

在某些工程领域,您可以固定日期和月份,并且年份可以变化。 但是那天和月对于开始计算很重要,而不考虑你是哪一年。 例如,您的用户只应选择一天一个月,并且提供年份取决于您。

您可以使用以下方法创建自定义combobox: 可自定义的ComboBox下拉菜单 。

1-在VS中创建用户控件。

2-请参阅上面链接中的代码以阻止该控件。

3-创建另一个用户控件并在其中放置31按钮或标签,在它们上方放置一个标签以显示月份。

4-将控件放入自定义combobox中的步骤3中。

5-将控制器放入步骤1中的setp 4中。

你现在只有几天和几个月的控制权。 您可以使用数据库中的任何年份或….