私はこれを思いつきました:
char fmt[64], buf[64];
struct timeval tv;
struct tm *tm;
gettimeofday(&tv, NULL);
if((tm = localtime(&tv.tv_sec)) != NULL)
{
strftime(fmt, sizeof fmt, "%Y-%m-%d %H:%M:%S.%%06u %z", tm);
snprintf(buf, sizeof buf, fmt, tv.tv_usec);
printf("'%s'\n", buf);
}
発生した問題の修正:
gettimeofday()
、およびstruct timeval
、より高い精度のためにマイクロ秒メンバーを持つ を使用します。
- マイクロ秒を除くすべてのデータを含む文字列を最初に作成する 2 段階のアプローチを使用します。
- タイムゾーン オフセットには小文字の「z」を使用します。これは GNU 拡張のようです。
struct timezone *
の 2 番目の引数を使用して、タイムゾーン オフセットを手動で再作成しようとしましたgettimeofday()
が、私のマシンでは正しくない 0 のオフセットが返されます。のマニュアル ページにgettimefday()
は、Linux (私がテストした OS) でのタイムゾーンの処理について多くのことが書かれています。