Secondo lo standard POSIX.1-2001, il mese prossimo (come incrementando tm_mon
prima di chiamare mktime
) viene eseguita regolando i valori finché non si adattano. Quindi, ad esempio, il mese successivo dal 31 gennaio 2001 è il 3 marzo 2001. Questo perché il tm_mday
di 31 non è valido con tm_mon
di 1 (febbraio), quindi è normalizzato a tm_mon
di 2 (marzo) e tm_mday
di 3.
Il mese successivo dal 31 gennaio 2000 è il 2 marzo 2000, perché febbraio ha 29 giorni quell'anno. Il prossimo mese dal 1 gennaio 2038 non esiste, dipende.
Il bello degli standard è che ce ne sono così tanti tra cui scegliere . Controlla lo standard SQL, scommetto che puoi trovare un significato diverso del prossimo mese. Sospetto che ISO 8601 possa darti un'altra scelta. Il punto è che ci sono molti comportamenti diversi, il significato di "mese prossimo" è molto specifico del dominio.
modifica:penso Ho scoperto come lo gestisce SQL-92, a quanto pare chiedere il mese prossimo dal 31 gennaio è un errore.
Collegamenti:
- SQL-92:http://www.contrib .andrew.cmu.edu/~shadow/sql/sql1992.txt
- POSIX:http://pubs.opengroup.org/onlinepubs/9699919799/ (anche se a quanto pare quella versione ora rimanda a ISO C, il che non sembra così chiaro. La manpage di mktime sulla mia macchina è chiara, però)
- 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