[言語別TIME処理] C言語で時間処理

close-up-1867315_1280
LINEで送る
Share on GREE
Share on LinkedIn

C言語における日時処理は「time」「unistd」「sys/time」のランタイムをincluodeすることで実現できます。
ただし、型の宣言に厳しい言語だけに、他の言語のように、フォーマット切り替えを行うことに対して制約が大きいです。
しかし、言語の制約に乗っかるのは世の常なので、きちんと言語仕様を守って行いましょう。
特殊だなと思ったのは、「time_t」「tm」などのような時間用の型が存在して、それを引っ張っていくので、
数値で計算したりするのが少しやりづらい・・・と感じました。

時間操作の要件

  1. 1900年からの秒数(UnixTime)
  2. sleep処理
  3. 1番からYmdHisの取得(曜日含む)
  4. YmdHisから1番の取得
  5. ミリ秒の取得
  6. 本プログラムの経過秒数

ソース

実行

解説

UnixTimeの取得

time.hをincludeして上記プログラムだけで取得できますが、型が「time_t」となっているところに注意しましょう。
PHPのように、数値で保持して便利に切り替えられる事は出来ないことがわかりました。
ちなみに、この型をprintするには「%ld」

time_tフォーマットを日時値として取得

これはtime_tフォーマットからの取得の為、microSecやGMTなどの情報が取れません。
timevalなどの型で全て処理したほうがいいのかな?
でも、無駄な情報を常に持っているのも無駄というメモリ管理にうるさいC言語ならではの仕様なので、
おそらく適材適所だろうと思います。

ミリ秒

今回のミリ秒はstart値から取得するのではなく、その時のタイミングで新たに取得しています。
時間値という値を保持する場合、ミリ秒が必要な場合は、timevalで引っ張っていくほうが良さそうですが、
この型の事はあまり調べていません。
必要だと感じたら記事にしたいと思います。

GMTの取得

これも非常に特殊で、tm型でフォーマット宣言することにより取得できます。

サマータイム

ちなみに、今回は国内対応のみで考えていたので、サマータイムは考慮してません。
timeライブラリの中にはサマータイム値が得られるので、基本時間との差分も取れるようです。
グローバル・サービスなどの場合は必須でしょうね。

参考サイト

下記サイトには、C言語のtimeライブラリのリファレンスやサンプルコードが乗っています。
今回の記事で参考にさせてもらいました。ありがとうございます。

スリープ処理 | 碧色工房-blue studio-
C言語ケーススタディ 日付/時刻の操作 | C言語入門
C言語 struct tm構造体をtime_t型に変換 – time.h – [ mktime ] | 勇躍のゴミ箱
C言語で正確にミリ秒マイクロ秒単位まで計測する方法 | 8ttyan’s blog
標準ライブラリで提供される時間・エラー処理に関する便利な機能 | @IT

日付の書式GMT | Walking Dog

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*