TZ、日付、hwclockを正しく使用していますか?

TZ、日付、hwclockを正しく使用していますか?

私はBuildrootでカスタマイズされたボード用に開発されたARM / ulibc Linuxディストリビューションに取り組んでいます。の関係を理解し​​ようとしています

これにより、オンラインでいくつかの例を見たように、次のようになります。

# date --set "2013-04-09 15:06:30"
Tue Apr  9 15:06:30 CDT 2013
# hwclock --systohc --utc
# hwclock
Tue Apr  9 15:06:39 2013  -0.351552 seconds

再起動すると、次の結果が表示されます。

.... boot messages ...
... setting system clock to 2013-04-09 20:07:31 UTC (1365538051)
.... boot messages ...
#
# date; hwclock;
Tue Apr  9 15:08:24 CDT 2013
Tue Apr  9 15:08:25 2013  -0.473164 seconds
#
# date -u; hwclock -u;
Tue Apr  9 20:08:44 UTC 2013
Tue Apr  9 15:08:45 2013  -0.397120 seconds
#
# date; hwclock --localtime
Tue Apr  9 15:09:07 CDT 2013
Tue Apr  9 20:09:08 2013  -0.686601 seconds
#

だからhwclockは現地時間に基づいて考えているようです。はいUTC?-u実際に適用してみるとなんだか対応可能代わりにタイムゾーン?少し混乱しています。誰でもこの問題をどのように処理するかを提案できますか?

編集する: 単純なARM + Busybox + uclibcシステムとして、sysconfigやzoneinfoなどの一般的なディレクトリやファイルがあまりないことに注意してください。

ベストアンサー1

--utchwclockハードウェア時計にUTCを保持するように指示し、ハードウェア時計--localtimeにシステム時計と同じタイムゾーンを維持するように指示します。 (より正確には、ハードウェアクロックが現在のシステムクロックと同じUTCオフセットにあることを意味します。ハードウェアクロックは通常DSTが有効になっているかどうかはわかりません)。

理論的には、これはあなたが知る必要があるすべてを教えてくれます。実際、これは混乱する可能性があります。

# date -u; hwclock -u;
Tue Apr  9 20:08:44 UTC 2013
Tue Apr  9 15:08:45 2013  -0.397120 seconds

「まず、UTCのシステム時間を教えてください。それでは、ハードウェアクロックがUTCのままであると仮定すると、ローカルタイムゾーンの時間はどうなりますか?」

# date; hwclock --localtime
Tue Apr  9 15:09:07 CDT 2013
Tue Apr  9 20:09:08 2013  -0.686601 seconds

「まず、現地時間帯のシステム時間を教えてください。それでは、ハードウェア時計が現地時間を維持していると仮定すると、現地時間帯の時間は何時ですか?」

ほとんどのシステムでは、TZ環境変数を設定してプロセスのタイムゾーンを設定できます。これはPOSIX機能です。 BusyBoxはこれをサポートし(コンパイル時にこの機能をオフにするオプションは表示されません)、uClibcもサポートすると思います。クロック同期を実行すると、短時間でUTCですべてを操作するのに役立ちます。

export TZ=UTC0
date
hwclock

おすすめ記事