I henhold til POSIX.1-2001-standarden, næste måned (som ved at øge tm_mon
før du kalder mktime
) gøres ved at justere værdierne, indtil de passer. Så for eksempel er næste måned fra den 31. januar 2001 den 3. marts 2001. Dette skyldes, at tm_mday
af 31 er ikke gyldig med tm_mon
af 1 (februar), så den er normaliseret til tm_mon
af 2 (marts) og tm_mday
af 3.
Den næste måned fra 31. januar 2000 er 2. marts 2000, fordi februar har 29 dage det år. Den næste måned fra januar, 1 2038 eksisterer ikke, afhængigt af.
Det fantastiske ved standarder er, at der er så mange at vælge imellem . Tjek SQL-standarden, jeg vil vædde på, at du kan finde en anden betydning af næste måned. Jeg formoder, at ISO 8601 kan give dig endnu et valg. Pointen er, at der er mange forskellige adfærd, betydningen af "næste måned" er meget domænespecifik.
edit:Jeg tror Jeg har fundet ud af, hvordan SQL-92 håndterer det, og det er åbenbart en fejl at bede om næste måned fra den 31. januar.
Links:
- SQL-92:http://www.contrib .andrew.cmu.edu/~shadow/sql/sql1992.txt
- POSIX:http://pubs.opengroup.org/onlinepubs/9699919799/ (selvom den version åbenbart nu udskyder ISO C, hvilket ikke virker så tydeligt. Mktime-manpagen på min maskine er dog klar)
- 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