web-dev-qa-db-fra.com

Créer une date avec le mois et le jour uniquement, sans année

Je crée un travail de minuteur dans VS pour SharePoint, et je veux créer un objet Date qui ne comporte qu'un mois et un jour. La raison en est que je veux que ce travail soit exécuté chaque année à la date précise. 

Si ce n'est pas possible avec un objet de date, comment vous y prendrez-vous?

Voici ce que j'ai

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

Eh bien, vous pouvez créer votre propre type - mais un DateTimetoujours a une date et une heure complètes. Vous ne pouvez même pas avoir "juste une date" en utilisant DateTime - le plus proche que vous puissiez avoir est d'avoir une DateTime à minuit.

Vous pouvez toujours utiliser ignorer l'année _ ou prendre l'année en cours:

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

Pour créer votre propre type, vous pouvez toujours simplement incorporer une DateTime dans une structure et un proxy sur des appels tels que 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
}

Notez que l'année que vous choisissez affecte le comportement du type - le 29 février devrait-il être une valeur mois/jour valide ou non? Cela dépend de l'année ...

Personnellement, je ne pense pas que je voudrais créer un type pour cela. J'aurais plutôt une méthode pour renvoyer "la prochaine fois que le programme devrait être exécuté".

43
Jon Skeet

Il n’existe pas de DateTime sans un an!

D'après ce que je comprends de votre conception est un peu étrange:

Je recommanderais de stocker un "début" (DateTime comprenant l'année pour la première occurrence) et une valeur indiquant comment calculer le prochain événement ... il peut s'agir par exemple d'une TimeSpan ou d'une structure personnalisée esp. étant donné que "chaque année" peut signifier que l'événement se produit à une date spécifique et ne serait pas automatiquement identique à dire qu'il se produit dans un délai de +365 jours.

Après que l'événement se produise vous calculez le prochain et le stockez etc.

1
Yahia

Pourquoi ne pas créer une minuterie avec la prochaine date? 

Dans votre rappel de minuterie, vous créez la minuterie pour l'année suivante? DateTime a toujours une valeur d'année. Ce que vous voulez exprimer est une spécification de temps récurrent. Ceci est un autre type que vous devez créer. DateTime représente toujours une date et une heure spécifiques mais pas une date récurrente.

1
Alois Kraus

Quoi qu'il en soit, vous avez besoin de "Année". 

Dans certains domaines de l’ingénierie, le jour et le mois sont fixes et l’année peut être variable. Mais ce jour et ce mois sont importants pour commencer le calcul sans considérer quelle année vous êtes. Votre utilisateur, par exemple, ne doit sélectionner qu'un jour et un mois et indiquer l'année à vous de décider.

Vous pouvez créer une liste déroulante personnalisée en utilisant ceci: Menu déroulant personnalisable .

1- Dans VS créer un contrôle utilisateur.

2- Voir le code dans le lien ci-dessus pour impulser ce contrôle.

3- Créez un autre contrôle utilisateur et placez-y un bouton ou une étiquette, et au-dessus d'eux, placez une étiquette indiquant les mois.

4- Placez le contrôle à l'étape 3 dans votre liste déroulante personnalisée.

5- Placez la commande à la étape 4 à l’étape 1.

Vous avez maintenant un contrôle avec seulement des jours et des mois. Vous pouvez utiliser n'importe quelle année dans votre base de données ou ....

0
Mohsen