例)2004/12/31 23:59:59 ⇒ 2005/01/01 00:00:00 というように。(閏年の考慮は必須です)
URLはダミーです。
まず。文字列を適当のパースして各項目の数値を取り出します。面倒ならsscanfで良いでしょう。
それをstruct tmに代入します。
で、mktime(3)でtime_tの値に変換し、+1して、gmtime(3)でstruct tmに戻し、asctime(3)で文字列に変換します。
詳しくはman ctime してください。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...
MSDN ライブラリ サイト移行に関する重要なお知らせ
となると、やはり、ctimeに関するところを自作するしかないのではないでしょうか?
VC++7以降だと__time64_t, _ctime64があるんですけど、環境依存してしまいますね。
VC++ではなく、C言語と明記しています。自作する予定でしたがロジックが思いつかないので参考になるサンプルの質問をしているのを理解してください。
http://www.dinop.com/vc/isuruudoshi.html
うるう年かどうかを判定 : www.dinop.com
うるう年の判定方法です。
後は単純に足し算をするだけです。
ロジック的には...
秒が59でしたら00にして分に1を加算。(加算する前の)分が59だった場合には00にして時に1を加算。時が23だったなら日に1を加算。日が月末(毎月のデータを配列で用意するなりして判定。うるう年に注意)だったら1にして月を加算。月が12だったら年を加算。
という形になります。しかし業務用途にせよ1番の方の方法を取るのが普通だと思います。バグの可能性も減らせますし。もちろん仕様で要求されていれば別ですが。
http://jjy.nict.go.jp/QandA/data/leapsec.html
���{�W�����v���W�F�N�g�@Information of Leap second
このロジックとは別に年によってはうるう秒が加算される場合があります。
2005年12月31日23時59分59秒に1秒足すと
2005年12月31日23時59分60秒になります。
うるう秒は不定期に加算されるため、過去のうるう秒は分かりますが、数十年先の将来に関しては不明なため、計算で誤差が生じます(これはどうしようもありません)。
了解です。ただAIXでは1の方法では特定のパターンでバグがあるため正確に動作しないためです。
2037年以降の計算をする場合には,この方法は使えませんよね。次の方からはacstime を使わずに行う方法をお願いします。(ちょっと業務で使いたいので・・・)