我在VS中为sharepoint创建一个计时器作业,我想创建一个只有月和日的Date对象。原因是因为我希望这份工作每年在特定日期开展。
如果使用日期对象是不可能的,那么您将如何进行此操作?
这就是我所拥有的:
DateTime value = new DateTime(2010, 1, 18);
答案 0 :(得分:44)
好吧,您可以创建自己的类型 - 但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<MonthDay>
{
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日是否应该是有效的月/日值?这取决于一年......
就我个人而言,我认为我不会为此创建一个类型 - 相反,我有一个方法可以在下次运行该程序时返回。“
答案 1 :(得分:1)
没有像DateTime
那样没有一年的事情!
从我收集到的你的设计有点奇怪:
我建议存储一个“开始”(DateTime
包括第一次出现的年份)和一个指定如何计算下一个事件的值...这可以是例如TimeSpan
或一些自定义结构,尤其是因为“每年”可能意味着事件发生在特定日期,并且不会自动与说明它发生在+365天内相同。
事件发生后,你计算下一个并存储等等。
答案 2 :(得分:1)
如何使用下一个日期创建计时器?
在你的计时器回调中你创建了下一年的计时器? DateTime始终为年份值。您想要表达的是经常性的时间规范。这是您需要创建的另一种类型。 DateTime始终表示特定的日期和时间,但不是重复的日期。
答案 3 :(得分:0)
无论如何你需要&#39;年&#39;。
在某些工程领域,您可以固定日期和月份,并且年份可以变化。但是那天和月对于开始计算很重要,而不考虑你是哪一年。例如,您的用户只应选择一天一个月,而提供年份取决于您。
您可以使用以下方法创建自定义组合框:Customizable ComboBox Drop-Down。
1-在VS中创建用户控件。
2-请参阅上面链接中的代码以阻止该控制。
3-创建另一个用户控件并在其中放置31个按钮或标签,在它们上方放置一个标签以显示月份。
4-将控件放入自定义组合框中的步骤3中。
5-在步骤1中将控件放入setp 4中。
您现在拥有一个只有几天和几个月的控件。您可以使用数据库中的任何年份或....