C# 创建日期时间,仅包含月份和日期,不包含年份

C# 创建日期时间,仅包含月份和日期,不包含年份,c#,datetime,C#,Datetime,我正在VS for sharepoint中创建计时器作业,我想创建一个只有月份和日期的日期对象。这样做的原因是因为我希望此作业每年在特定日期运行 如果使用日期对象不可能,那么您将如何执行此操作 以下是我得到的: DateTime value = new DateTime(2010, 1, 18); 当然,您可以创建自己的类型,但是DateTime总是有完整的日期和时间。你甚至不能用DateTime来“仅仅是一个日期”——最接近的方法就是在午夜拥有一个DateTime 您可以忽略年份,也可以选择

我正在VS for sharepoint中创建计时器作业,我想创建一个只有月份和日期的日期对象。这样做的原因是因为我希望此作业每年在特定日期运行

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

以下是我得到的:

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<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
}
public struct MonthDay:IEquatable
{
私有只读日期时间日期时间;
公共月日(整数月,整数日)
{
dateTime=新的日期时间(2000,月,日);
}
公共月日天数(整数天)
{
添加的日期时间=DateTime.AddDays(天);
返回新的MonthDay(添加的月份,添加的日期);
}
//TODO:实现接口、平等性等
}
请注意,您选择的年份会影响类型的行为-2月29日是否应为有效的月/日值?这取决于年份


就我个人而言,我不认为我会为此创建一个类型——相反,我会有一个方法返回“下次运行程序时”。没有年份的
日期时间这样的东西是不存在的

据我所知,您的设计有点奇怪:

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


事件发生后,您计算下一个日期并将其存储起来。

创建一个带有下一个日期的计时器怎么样

在计时器回调中,是否为下一年创建计时器?DateTime始终具有年值。您想要表达的是一个循环时间规范。这是您需要创建的另一种类型。
DateTime始终表示一个特定的日期和时间,而不是一个重复的日期。

无论如何,您需要“年”

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

您可以使用以下命令创建自定义组合框:

1-在VS中创建用户控件

2-请参阅上面链接中的代码以实现该控制

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

4-将步骤3中的控件放置在自定义组合框中

5-在步骤1中,将控件置于setp 4中


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

日期有年份。故事结束了。如果您只想要月份和日期,请创建自己类型的对象来保存它。谁将使用此datetime对象?是的,我想我的问题是。。您如何能够在没有多个对象的情况下拥有重复日期/events@novicePrgrmr:你所说的没有….
的重复日期是什么意思?@sll我指的是每年指定的月份和日期….@Shimmy:Noda Time中没有月/日类型,也没有-也没有你可能想要的信用卡的年/月类型。tx作为你的回复。在Java节点时间中有,我错了吗?@Shimmy:你是说在Joda时间?对我还没有决定这是否是一个足够重要的想法,可以包含在野田佳彦的时间里——我正在努力保持这种精益。@MikkelR.Lund:自从写了这个答案(近6年前)和评论(2年前)以来Noda Time现在确实有
AnnualDate
@Ash18:您可以使用
DateTimeFormatInfo.MonthNames
DateTimeFormatInfo.缩写月名
。我不确定这是否真的与你添加评论的问题有关——最好问一个新问题。