Question

Je travaille sur un algorithme en C # pour calculer un passé DateTime à partir d'une chaîne d'entrée avec les caractéristiques suivantes:

La chaîne contient un nombre entier suivi soit par 'D', 'M' ou 'Y', tels que "1D" ou "90M".

La sortie sera DateTime.Now moins le nombre correspondant de jours, mois ou années.

La question que j'ai est que si, par exemple, je passe la chaîne d'entrée sur un Regex (D, M ou Y) et soustrayez le TimeSpan correspondant de DateTime.Now, le nouveau constructeur TimeSpan () n'accepte pas mois ou années, seulement quelques jours.

if (new Regex(@"[0-9]+D").IsMatch(value))
{
    newDate = DateTime.Now - TimeSpan(Int32.Parse(value.Replace("D", "")), 0, 0);
}

Cette logique est très bien si la chaîne d'entrée est en jours, mais le constructeur de TimeSpan n'accepte pas des mois ou des années, et il serait incroyablement inexact si je pris chaque mois avait 30 jours, ou chaque année a 365 jours.

Quelqu'un at-il des pensées sur la façon de mettre en œuvre cet algorithme?

Merci!

Était-ce utile?

La solution

DateTime a AddMonths , AddDays et AddYears méthodes . Utilisez-les avec moins de soustrayez

Autres conseils

Pouvez-vous pas plutôt essayer d'utiliser le AddDays / AddMonths / AddYears mais avec des nombres négatifs?

De DateTime.AddDays Méthode

  

Le paramètre de valeur peut être négatif ou   positive.

Et alors peut-être mettre en œuvre juste un stament de commutateur pour appliquer la méthode Add appropriée.

Pour soustraire mois, je crée un nouveau DateTime et évaluer le mois / année. Donc 1/2010 -. 6 mois serait 6/2010 ... une fois que vous avez le mois / année établie, vous pouvez consulter le composant jour datetime original, et veiller à ce qu'il convient dans le mois

C'est ce que je faisais. Année a été évaluée de la même manière. Jours est facile soustraction; utiliser le composant TimeSpan pour le faire.

Rappelez-vous que vous pouvez ajouter des quantités négatives aussi bien et vérifier ce procédé et celui-ci .

http://msdn.microsoft.com/en-us/library /3z48198e.aspx TimeSpan.TryParse accepte très proche de votre chaîne aussi longtemps que vous pouvez sa mise en forme est compatible avec ou convertir de la vôtre à son.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top