Enligt standarden POSIX.1-2001, nästa månad (som vid ökning av tm_mon
innan du anropar mktime
) görs genom att justera värdena tills de passar. Så, till exempel, nästa månad från den 31 januari 2001 är den 3 mars 2001. Detta beror på att tm_mday
av 31 är inte giltig med tm_mon
av 1 (februari), så den är normaliserad till tm_mon
av 2 (mars) och tm_mday
av 3.
Nästa månad från 31 januari 2000 är 2 mars 2000, eftersom februari har 29 dagar det året. Nästa månad från januari, 1 2038 existerar inte, beroende på.
Det fantastiska med standarder är att det finns så många att välja mellan . Kontrollera SQL-standarden, jag slår vad om att du kan hitta en annan betydelse för nästa månad. Jag misstänker att ISO 8601 kan ge dig ännu ett val. Poängen är att det finns många olika beteenden, innebörden av "nästa månad" är väldigt domänspecifik.
edit:Jag tror Jag har upptäckt hur SQL-92 hanterar det, uppenbarligen är det ett fel att be om nästa månad från 31 januari.
Länkar:
- SQL-92:http://www.contrib .andrew.cmu.edu/~shadow/sql/sql1992.txt
- POSIX:http://pubs.opengroup.org/onlinepubs/9699919799/ (även om den versionen tydligen nu övergår till ISO C, vilket inte verkar lika tydligt. Mktime-mansidan på min maskin är dock tydlig)
- 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