Съгласно стандарта POSIX.1-2001, следващия месец (както при увеличаване на tm_mon
преди да извикате mktime
) се извършва чрез коригиране на стойностите, докато паснат. Така например следващият месец от 31 януари 2001 г. е 3 март 2001 г. Това е така, защото tm_mday
от 31 не е валидно с tm_mon
от 1 (февруари), така че се нормализира на tm_mon
от 2 (март) и tm_mday
от 3.
Следващият месец от 31 януари 2000 г. е 2 март 2000 г., тъй като февруари тази година има 29 дни. Следващият месец от януари 1 2038 не съществува, в зависимост.
Страхотното при стандартите е, че има толкова много, от които да избирате . Проверете SQL стандарта, обзалагам се, че ще намерите различно значение на следващия месец. Подозирам, че ISO 8601 може да ви даде още един избор. Въпросът е, че има много различни поведения, значението на „следващия месец“ е много специфично за домейна.
редактиране:мисля Открих как SQL-92 се справя, очевидно искането за следващия месец от 31 януари е грешка.
Връзки:
- SQL-92:http://www.contrib .andrew.cmu.edu/~shadow/sql/sql1992.txt
- POSIX:http://pubs.opengroup.org/onlinepubs/9699919799/ (въпреки че очевидно тази версия сега се отклонява от ISO C, което не изглежда толкова ясно. Въпреки това mktime man page на моята машина е ясна)
- 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