Podle standardu POSIX.1-2001 příští měsíc (jako při zvyšování tm_mon
před voláním mktime
) se provádí úpravou hodnot, dokud nezapadají. Takže například příští měsíc od 31. ledna 2001 je 3. březen 2001. Důvodem je, že tm_mday
z 31 není platné s tm_mon
z 1 (únor), takže je normalizován na tm_mon
ze dne 2 (březen) a tm_mday
ze 3.
Dalším měsícem od 31. ledna 2000 je 2. březen 2000, protože únor má toho roku 29 dní. Další měsíc od ledna 1 2038 v závislosti na tom neexistuje.
Skvělé na standardech je, že je z čeho vybírat . Zkontrolujte standard SQL, vsadím se, že příští měsíc najdete jiný význam. Mám podezření, že ISO 8601 vám může dát ještě jinou možnost. Jde o to, že existuje mnoho různých chování, význam slova „příští měsíc“ je velmi specifický pro doménu.
edit:myslím Zjistil jsem, jak to SQL-92 zvládá, dotazování na příští měsíc od 31. ledna je zjevně chyba.
Odkazy:
- SQL-92:http://www.contrib .andrew.cmu.edu/~shadow/sql/sql1992.txt
- POSIX:http://pubs.opengroup.org/onlinepubs/9699919799/ (ačkoli tato verze se nyní zjevně odkládá na ISO C, což se nezdá tak jasné. Manuálová stránka mktime na mém počítači je však jasná)
- 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