時間情報には様々な種類があり、また環境により利用できる関数も変わってくる。C言語の環境であればどこでも利用できる標準関数から始まり、POSIX環境、Windows環境で利用できるAPIも紹介する。C言語標準まずはC言語の標準関数で、C言語が使える環境であればどこでも使用できる方法を紹介する。time()時刻情報を取得するtime()関数。プロトタイプ宣言は以下のようになっている。*t);値の取得方法としては、以下のように引数に格納先へのポインタを渡す方法。t;time(&t);または、以下の用に戻り値を利用する方法。time(NULL);引数がNULLでない場合は、その値に代入した後、同じ値が戻される。どちらを使っても違いはない。通常は戻り値を利用するほうが使いやすいだろう。0;}以下の様な結果が得られる。14465512458time()の戻り値は、1970年1月1日0時0分0秒(UTC)からの経過秒数である。ほとんどのコンピュータシステムがこの値で時間を管理している。符号付き整数で扱われている。なっているシステムもあるかもしれない。時刻を扱う上で、プログラマーであれば必ず知っておくべき事柄なので、2038年問題について書いておく。あり、これをUNIX時間として解釈すると2038年1月19日3時14分7秒となる。整数で扱っているシステムが正常に動作しなくなる。この制限は何も最終的な出力としてだけでなく、計算の途中にも発生する。期日の中間地点を計算する場合、安直には二つの時間を足して2で割る計算をするだろう。誤動作したという事件も発生している。既存のライブラリ等を素直に利用していれば、問題が起こらないようになってきてはいる。一箇所でもあると将来問題が発生するので注意しよう。何かの経過時間を取るということであれば、はじめと終わりでこの時間を取得し、差を取れば良い。面倒な手続きが必要であるため、幾つかの関数が用意されている。以下の関数を使うと、現在時刻を表現する文字列に変換してくれる。スレッドセーフ版で出力バッファを引数で指定する。以下のように使用する。2015と言った出力が得られる。柔軟性がなく、日本時間ではあるが日本ではあまり馴染みのない出力になる。以下の関数を使うと、日付時刻の各パラメータに分離された構造体に変換できる。GMT、localtime()は地域情報に基づき時差を含めた時刻に変換する。tm構造体は以下の様な構造となっている。*/};これを使用し、文字列に変換するとすれば以下のようになるだろう。0;}年が西暦から1900を引いた値なので、1900を足す。数字として出力する場合は1を足す必要がある。出力は以下のようになる。20:47:25ただ、単純に文字列に変換したいだけの場合は、上記の記述方法は多少冗長で面倒である。そこで、時刻情報を文字列に変換する関数が用意されている。tmを元に文字列を作成することができる。フォーマットの詳細についてはMANなどを参照。使用例は以下のようになる。0;}出力は以下のようになり、先ほどのprintfを使用したものと同じ出力を、より簡単に記述することができる。日付表記方法を表現するための手段の一つとして使用されることもある。自前での計算これまで、用意された関数を利用してUNIX時間から日時情報への変換を紹介した。時間情報については単純な計算で変換できる。あるので、以下の計算で時、分、秒を求めることができる。0;}実行結果は以下のようになる。分かりやすさや確実性から変換関数を利用するのがよいだろう。単純で小さなコストの計算で求められることを覚えておくと良いだろう。最後に、注意点として時刻情報ということはシステムの時計に依存する。意図しない値が取れてしまう場合があるので気をつけよう。GetLocalTime()更新情報2018/07/28lsっぽいコマンドを作る13アップしました。2018/07/13lsっぽいコマンドを作る12アップしました。2017/01/04lsっぽいコマンドを作る11アップしました。2017/01/03lsっぽいコマンドを作る10アップしました。(https://commoncrawl.org/faq/)。