Подтвердить что ты не робот

Создание даты с месяцем и днем, без года

Я создаю задание таймера в VS для sharepoint, и я хочу создать объект Date, у которого есть только месяц и день. Причина этого в том, что я хочу, чтобы эта работа выполнялась ежегодно в определенную дату.

Если это невозможно с объектом даты, то как бы вы это сделали?

Вот что у меня есть:

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

Ответ 1

Ну, вы можете создать свой собственный тип, но 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
}

Обратите внимание, что год, который вы выбираете, влияет на поведение типа - должно ли 29 февраля быть действительным значением месяца/дня или нет? Это зависит от года...

Лично я не думаю, что я бы создал тип для этого - вместо этого у меня был бы способ вернуть "в следующий раз, когда программа должна быть запущена".

Ответ 2

Нет такой вещи, как DateTime без года!

Из того, что я собираю, ваш дизайн немного странный:

Я бы рекомендовал хранить "start" (DateTime включая год для FIRST-появления) и значение, которое определяет, как вычислить следующее событие... это может быть, например, TimeSpan или некоторая настраиваемая структура esp, так как "каждый год" может означать, что событие происходит в определенную дату и не будет автоматически совпадать с тем, что оно происходит в течение +365 дней.

После возникновения события вы вычисляете следующий и сохраняете его и т.д.

Ответ 3

Как создать таймер со следующей датой?

В вашем обратном вызове таймера вы создаете таймер на следующий год? DateTime всегда имеет значение в год. То, что вы хотите выразить, - это повторяющаяся спецификация времени. Это другой тип, который вам нужно создать. DateTime всегда представляет определенную дату и время, но не повторяющуюся дату.

Ответ 4

В любом случае вам нужен "Год".

В некоторых областях техники вы фиксировали день, а месяц и год могут быть переменными. Но этот день и месяц важны для начала расчета без учета того, в каком году вы находитесь. Например, ваш пользователь должен выбрать день и месяц, и вам будет предоставлен год.

Вы можете создать пользовательское поле со списком, используя это: Настраиваемое выпадающее меню ComboBox.

1- В VS создайте пользовательский элемент управления.

2- См. код в приведенной выше ссылке для impelemnting этого элемента управления.

3 Создайте еще один пользовательский элемент управления и разместите в нем 31 кнопку или ярлык, а над ними поместите ярлык, чтобы показать месяцы.

4 Поместите элемент управления на шаге 3 в свою собственную комбинированную копию.

5 Поместите элемент управления в setp 4 на шаге 1.

Теперь у вас есть контроль с несколькими днями и месяцами. Вы можете использовать любой год, который у вас есть в вашей базе данных или...