2011-10-31 42 views
25

Estoy creando un trabajo de temporizador en VS para compartir, y quiero crear un objeto de fecha que solo tiene un mes y día. La razón de esto es porque quiero que este trabajo se ejecute anualmente en la fecha específica.Crear una fecha solo con mes y día, sin año

Si no es posible con un objeto de fecha, ¿cómo harías para hacerlo?

Esto es lo que tengo:

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

Las fechas tienen años. Fin de la historia. Si solo desea mes y fecha, cree su propio tipo de objeto para mantenerlo. –

+0

cierto, supongo que mi pregunta es ... ¿Cómo podría tener una fecha recurrente sin tener múltiples objetos/eventos? – novicePrgrmr

+1

¿Quién utilizará este objeto datetime? – sll

Respuesta

40

Bueno, usted puede crear su propio tipo - sino un DateTime siempre tiene una fecha y tiempo completo. Ni siquiera puede tener "solo una fecha" usando DateTime - lo más cercano que puede venir es tener un DateTime a medianoche.

Siempre podría ignorar el año, aunque - o tomar el año en curso:

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

para crear su propio tipo, siempre se puede simplemente insertar un DateTime dentro de una estructura, y el proxy en llamadas como AddDays etc:

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 
} 

Tenga en cuenta que el año que elija afecta el comportamiento del tipo - Feb debe ser un valor 29no mes/día válido o no? Depende del año ...

Personalmente, no creo que sería crear un tipo para esto, en cambio tendría un método para devolver "la próxima vez que se ejecute el programa".

+1

¿[NodaTime] (http://nodatime.org/) soluciona este problema? – Shimmy

+0

@Shimmy: No hay un tipo de mes/día en Noda Time, no, ni un tipo de año/mes como es posible que desee para una tarjeta de crédito. –

+0

tx para su respuesta. Hay en Java NodaTime, ¿me equivoco? – Shimmy

1

No hay tal cosa como DateTime sin un año!

Por lo que sé su diseño es un poco extraño:

recomendaría almacenar un "start" (incluyendo DateTime año por primera ocurrencia) y un valor que designa la forma de calcular el próximo evento ... esto podría ser, por ejemplo, un TimeSpan o alguna estructura personalizada esp. ya que "cada año" puede significar que el evento ocurre en una fecha específica y no sería lo mismo que decir que ocurre en +365 días.

Después del evento se produce a calcular la siguiente y almacenar esa etc

1

¿Qué hay de la creación de un temporizador con la próxima fecha?

¿En la devolución de llamada del temporizador crea el temporizador para el año siguiente? DateTime siempre tiene un valor anual. Lo que quiere expresar es una especificación de tiempo recurrente. Este es otro tipo que necesitarías crear. DateTime siempre representa una fecha y hora específicas, pero no una fecha recurrente.

0

De todos modos necesitas 'Año'.

En algunos campos de ingeniería, ha arreglado día y mes y el año puede ser variable. Pero ese día y mes son importantes para comenzar a calcular sin considerar en qué año se encuentra. Su usuario, por ejemplo, solo debe seleccionar un día y un mes y proporcionar el año depende de usted.

Puede crear un combobox personalizado usando esto: Customizable ComboBox Drop-Down.

1- En VS crea un control de usuario.

2- Vea el código en el enlace de arriba para impelentar ese control.

3- Cree otro control de usuario y coloque en él el botón 31 o la etiqueta y encima de ellos coloque una etiqueta para mostrar los meses.

4- Coloque el control en el paso 3 en su cuadro combinado personalizado.

5- Coloque el control en setp 4 en el paso 1.

Ahora tiene un control con sólo unos días y meses. Puede usar cualquier año que tenga en su base de datos o ...

Cuestiones relacionadas