人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C言語の質問です。YYYY/MM/DD HH:MM:SSで記述された文字列があります。この文字列に1秒加算した場合の文字列を求めるロジックのサンプルはありませんでしょうか?
例)2004/12/31 23:59:59 ⇒ 2005/01/01 00:00:00 というように。(閏年の考慮は必須です)

●質問者: goldman
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:00 23 DD MM ss
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● masahikokimoto
●10ポイント

http://www.hatena.ne.jp/

はてな

URLはダミーです。

まず。文字列を適当のパースして各項目の数値を取り出します。面倒ならsscanfで良いでしょう。

それをstruct tmに代入します。

で、mktime(3)でtime_tの値に変換し、+1して、gmtime(3)でstruct tmに戻し、asctime(3)で文字列に変換します。

詳しくはman ctime してください。

◎質問者からの返答

2037年以降の計算をする場合には,この方法は使えませんよね。次の方からはacstime を使わずに行う方法をお願いします。(ちょっと業務で使いたいので・・・)


2 ● new_icu
●0ポイント

http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...

MSDN ライブラリ サイト移行に関する重要なお知らせ

となると、やはり、ctimeに関するところを自作するしかないのではないでしょうか?

VC++7以降だと__time64_t, _ctime64があるんですけど、環境依存してしまいますね。

◎質問者からの返答

VC++ではなく、C言語と明記しています。自作する予定でしたがロジックが思いつかないので参考になるサンプルの質問をしているのを理解してください。


3 ● nitscape
●50ポイント

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の方法では特定のパターンでバグがあるため正確に動作しないためです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ