De acordo com o padrão POSIX.1-2001, no próximo mês (como no incremento de
tm_mon
antes de chamar mktime
) é feito ajustando os valores até que eles se ajustem. Assim, por exemplo, o próximo mês a partir de 31 de janeiro de 2001 é 3 de março de 2001. Isso ocorre porque o tm_mday
de 31 não é válido com tm_mon
de 1 (fevereiro), então é normalizado para tm_mon
de 2 (março) e tm_mday
de 3. O próximo mês a partir de 31 de janeiro de 2000 é 2 de março de 2000, porque fevereiro tem 29 dias naquele ano. O próximo mês a partir de 1º de janeiro de 2038 não existe, dependendo.
O melhor dos padrões é que há muitos para escolher . Verifique o padrão SQL, aposto que você pode encontrar um significado diferente do próximo mês. Eu suspeito que a ISO 8601 pode lhe dar outra escolha. A questão é que existem muitos comportamentos diferentes, o significado de 'próximo mês' é muito específico do domínio.
edit:eu acho Descobri como o SQL-92 lida com isso, aparentemente pedindo para o próximo mês a partir de 31 de janeiro é um erro.
Links:
- SQL-92:http://www.contrib .andrew.cmu.edu/~shadow/sql/sql1992.txt
- POSIX:http://pubs.opengroup.org/onlinepubs/9699919799/ (embora, aparentemente, essa versão agora adie a ISO C, o que não parece tão claro. A página de manual do mktime na minha máquina é clara)
- 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