Selon la norme POSIX.1-2001, le mois prochain (comme en incrémentant tm_mon
avant d'appeler mktime
) se fait en ajustant les valeurs jusqu'à ce qu'elles correspondent. Ainsi, par exemple, le mois suivant à partir du 31 janvier 2001 est le 3 mars 2001. C'est parce que le tm_mday
de 31 n'est pas valide avec tm_mon
de 1 (février), il est donc normalisé à tm_mon
du 2 (mars) et tm_mday
de 3.
Le mois suivant à partir du 31 janvier 2000 est le 2 mars 2000, car février compte 29 jours cette année-là. Le mois suivant à partir du 1er janvier 2038 n'existe pas, ça dépend.
Ce qui est formidable avec les normes, c'est qu'il y a tellement de choix . Vérifiez la norme SQL, je parie que vous pouvez trouver un sens différent du mois prochain. Je soupçonne qu'ISO 8601 peut vous donner encore un autre choix. Le fait est qu'il existe de nombreux comportements différents, la signification de "le mois prochain" est très spécifique à un domaine.
edit :je pense J'ai trouvé comment SQL-92 le gère, apparemment demander le mois prochain à partir du 31 janvier est une erreur.
Liens :
- SQL-92 :http://www.contrib .andrew.cmu.edu/~shadow/sql/sql1992.txt
- POSIX :http://pubs.opengroup.org/onlinepubs/9699919799/ (bien qu'apparemment cette version s'en remette maintenant à ISO C, ce qui ne semble pas aussi clair. La page de manuel mktime sur ma machine est cependant claire)
- ISO C :http://www .open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
- Java :http://download. oracle.com/javase/6/docs/api/java/util/Calendar.html