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

时间:2011-10-31 19:46:45

标签: c# datetime

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

如果使用日期对象是不可能的,那么您将如何进行此操作?

这就是我所拥有的:

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

4 个答案:

答案 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中。

您现在拥有一个只有几天和几个月的控件。您可以使用数据库中的任何年份或....