POSIX.1-2001標準によると、来月(tm_mon
の増分など) mktime
を呼び出す前に )は、値が収まるまで値を調整することによって行われます。たとえば、2001年1月31日からの翌月は2001年3月3日です。これは、tm_mday
が原因です。 31のはtm_mon
では無効です 1(2月)の場合、tm_mon
に正規化されます。 of 2(3月)およびtm_mday
の3。
2000年1月31日からの翌月は2000年3月2日です。これは、2月がその年の29日であるためです。翌月の1月から2038年までは存在しません。
標準の優れている点は、選択できるものが非常に多いことです 。 SQL標準を確認してください。来月の別の意味を見つけることができると思います。 ISO8601はあなたにさらに別の選択肢を与えるかもしれないと私は思う。ポイントは、さまざまな動作があり、「来月」の意味は非常にドメイン固有です。
編集:私は考えます SQL-92がそれをどのように処理するかを見つけました。明らかに、1月31日から来月を要求するのは誤りです。
リンク:
- SQL-92: http://www.contrib .andrew.cmu.edu /〜shadow / sql / sql1992.txt
- POSIX: http://pubs.opengroup.org/onlinepubs/9699919799/ > (ただし、そのバージョンはISO Cに準拠しているようですが、これはそれほど明確ではないようです。ただし、私のマシンのmktimeマンページは明確です)
- 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