Zgodnie ze standardem POSIX.1-2001, w następnym miesiącu (jak w inkrementacji tm_mon
przed wywołaniem mktime
) odbywa się poprzez dostosowanie wartości, aż do ich dopasowania. Na przykład następny miesiąc od 31 stycznia 2001 to 3 marca 2001. Dzieje się tak, ponieważ tm_mday
z 31 jest nieprawidłowa z tm_mon
z 1 (luty), więc jest znormalizowany do tm_mon
z 2 (marzec) i tm_mday
z 3.
Następny miesiąc od 31 stycznia 2000 to 2 marca 2000, ponieważ luty ma 29 dni tego roku. W zależności od tego, następny miesiąc od 1 stycznia 2038 r. nie istnieje.
Wspaniałą rzeczą w standardach jest to, że jest tak wiele do wyboru . Sprawdź standard SQL, założę się, że możesz znaleźć inne znaczenie w przyszłym miesiącu. Podejrzewam, że ISO 8601 może dać ci jeszcze inny wybór. Chodzi o to, że istnieje wiele różnych zachowań, znaczenie „następnego miesiąca” jest bardzo specyficzne dla domeny.
edytuj:myślę Odkryłem, jak radzi sobie z tym SQL-92, najwyraźniej pytanie o następny miesiąc od 31 stycznia jest błędem.
Linki:
- SQL-92:http://www.contrib .andrew.cmu.edu/~shadow/sql/sql1992.txt
- POSIX:http://pubs.opengroup.org/onlinepubs/9699919799/ (chociaż najwyraźniej ta wersja odnosi się teraz do ISO C, co nie wydaje się tak jasne. Jednak strona podręcznika mktime na moim komputerze jest przejrzysta)
- 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