Volgens de POSIX.1-2001 standaard, volgende maand (zoals in oplopende tm_mon
voordat u mktime
calling belt ) wordt gedaan door de waarden aan te passen totdat ze passen. Dus bijvoorbeeld, volgende maand vanaf 31 januari 2001 is 3 maart 2001. Dit komt omdat de tm_mday
van 31 is niet geldig met tm_mon
van 1 (februari), dus het is genormaliseerd naar tm_mon
van 2 (maart) en tm_mday
van 3.
De volgende maand vanaf 31 januari 2000 is 2 maart 2000, omdat februari dat jaar 29 dagen heeft. De volgende maand vanaf januari 1 2038 bestaat niet, afhankelijk van.
Het mooie van standaarden is dat er zo veel zijn om uit te kiezen . Controleer de SQL-standaard, ik wed dat je volgende maand een andere betekenis kunt vinden. Ik vermoed dat ISO 8601 je misschien nog een andere keuze geeft. Het punt is dat er veel verschillende gedragingen zijn, de betekenis van 'volgende maand' is erg domeinspecifiek.
edit:ik denk Ik heb ontdekt hoe SQL-92 ermee omgaat, blijkbaar is het een fout om volgende maand vanaf 31 januari te vragen.
Links:
- SQL-92:http://www.contrib .andrew.cmu.edu/~shadow/sql/sql1992.txt
- POSIX:http://pubs.opengroup.org/onlinepubs/9699919799/ (hoewel die versie blijkbaar nu naar ISO C wordt verplaatst, wat niet zo duidelijk lijkt. De mktime-manpagina op mijn machine is echter duidelijk)
- 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