moyen facile d'ajouter de 1 mois à un time_t en C/C++

J'ai un code qui utilise l'Oracle de la fonction add_months pour incrémenter une Date par X le nombre de mois.

J'ai maintenant besoin de ré-appliquer la même logique à un C /C++ la fonction. Pour des raisons que je ne veux pas/besoin d'aller dans je ne peux pas simplement émettre une requête à l'oracle pour obtenir la nouvelle date.

Personne ne sait d'une manière simple et fiable de l'ajout de X nombre de mois pour un time_t?
Quelques exemples de types de calculs sont présentés ci-dessous.

30/01/2009 + 1 mois = 28/02/2009

31/01/2009 + 1 mois = 28/02/2009

27/02/2009 + 1 mois = 27/03/2009

28/02/2009 + 1 mois = 31/03/2009

31/01/2009 + 50 mois = 31/03/2013

  • Comme Mehrdad Afshari points ci-après, 28/02/2009 + 1 mois = 31/03/2009 n'est pas possible avec un type simple. Comment savez-vous que 28/02/2009 est le "dernier jour du mois" et non le "28e jour du mois". Ce n'est pas codée dans le type. Vous avez besoin d'une meilleure représentation.
  • Je pense que 28/02/2009 + 1 mois = 31/03/2009 est faux. Il devrait être 28/02/2009 + 1 mois = 28/03/2009. De comment .Net se comporte, les seuls exemples qui n'ont pas lieu au même jour du mois, où l'résultant mois a moins de jours que l'original mois. c'est à dire: 31/01/2009 + 1 mois = 28/02/2009
  • Maintenant que j'ai relu vos exemples, il semble que ce que vous êtes vraiment la recherche est de savoir comment chercher le dernier jour du mois, à un certain moment dans le mois dans le futur, ce qui est une question légèrement différente.
  • Subtil: 30/1/2009 + 1 mois + 1 mois = 28/3/2009 !
  • Plus subtil encore: 30/1/2009 +1 month - 1 month = 28/1/2009. Cela semble être une mauvaise façon de définir mois.
  • stimuler la date add_month effectue simplement de cette façon. Je pense que c'est étrange.

InformationsquelleAutor Glen | 2009-01-08