「Linuxには、「ハードウェアクロック」と「システムクロック」という2つの時計がある。
ハードウェアクロックとは、PC上のLSIに搭載された時計で、PCの電源を切った状態でも時刻を刻み続ける。時刻をCMOSに保存するので、
「CMOS時計」と呼ばれたり、「リアルタイムクロック(RTC)」などと呼ばれることもある。」- http://www.atmarkit.co.jp/flinux/rensai/linuxtips/030timeset.html
次の2つの方法があります。
hwclock コマンドにより設定する場合は、以下の項目を参照してください。
# hwclock -h
hwclock - query and set the hardware clock (RTC)
Usage: hwclock [function] [options...]
Functions:
--help show this help
--show read hardware clock and print result
--set set the rtc to the time given with --date
--hctosys set the system time from the hardware clock
--systohc set the hardware clock to the current system time
--adjust adjust the rtc to account for systematic drift since
the clock was last set or adjusted
--getepoch print out the kernel's hardware clock epoch value
--setepoch set the kernel's hardware clock epoch value to the
value given with --epoch
--version print out the version of hwclock to stdout
Options:
--utc the hardware clock is kept in coordinated universal time
--localtime the hardware clock is kept in local time
--directisa access the ISA bus directly instead of /dev/rtc
--badyear ignore rtc's year because the bios is broken
--date specifies the time to which to set the hardware clock
--epoch=year specifies the year which is the beginning of the
hardware clock's epoch value
--noadjfile do not access /etc/adjtime. Requires the use of
either --utc or --localtime
RTC(Real Time Clock)が正しく動かないとき、--directisaを付けると /dev/rtc を使わないようにできます。ただし、このオプションは、ISA マシンまたは (hwclock から充分 ISA マシンに見える程度 ISA の仕様を実装した) Alpha マシンでのみ有効です。
RTC が正しく動かないときは、このようなメッセージが表示されます。
# hwclock --show
select() to /dev/rtc to wait for clock tick timed out
コンピュータ(システム)に設定されている現在時刻は、次のコマンドで知ることができます。--utc オプションを使うと、世界標準時に換算して表示してくれます。
$ date
2008年 3月 12日 水曜日 10:11:15 JST
$ date --utc
2008年 3月 12日 水曜日 01:11:15 UTC
システム(OS)のタイムゾーン(標準時刻)を設定したり変更するには、tzconfig コマンドを用います。地域と都市名から指定します。
# tzconfig
Your current time zone is set to Europe/London
Do you want to change that? [n]: y
(--- 中略 ---)
Your default time zone is set to 'Asia/Tokyo'.
Local time is now: 2008年 3月 9日 日曜日 07:17:21 JST.
Universal Time is now: 2008年 3月 8日 土曜日 22:17:21 UTC.
現在のタイムゾーンを確認するには、次のコマンドを実行します。
$ TZ= date
他の地域のタイムゾーンを知るには、都市名またはコードで指定します。
$ TZ="utc" date
2008年 3月 13日 木曜日 20:26:19 utc
$ TZ="London" date
2008年 3月 13日 木曜日 20:26:19 London
デスクトップ右上のパネルに標準で表示される「時計アプレット(Clock)」 を用いれば、グラフィカルな画面上で時間の設定が容易に行えます。
この時計アプレットは、システムクロック から時刻を取得します。
以下のいずれかを選択します。
なお、ローカル時間に替えて、UTCを使用することもできます。
NTP サービスは前もってインストールしておきます*1。
以下、GNOME 環境での合わせ方です。
フ リー百科事典『ウィキペディア(Wikipedia)は、この問題に触れています。
「Windows NT系のOSではリアルタイムクロックにローカルタイムを書き込む。それに対して、UNIX系OSでは一般的にUTCで書き込む。その為、両者の間をデュ アルブートで往復すると時計がタイムゾーンに応じて狂ってしまう。この問題に対して、Windows NT系ではUTCを使うという対策がある。しかし、時刻が直感的に判り難く、またローカルタイムの概念を持たないアプリケーションではタイムスタンプが UTCをローカルタイムとみなして保存するので都合が悪くなる。UNIX系OSの一部では、RCのシャットダウンシーケンスの一部でUTCをローカルタイ ムに直してリアルタイムクロックに書き込み、Windowsを起動しても時計が狂わない様にした物もある。」
上記のとおり、OS のデュアルブート環境ではリアルタイムクロックとシステムクロックとの整合性に問題を抱えているようです。
Windows NT系のOSでは、リアルタイムクロックにローカルタイムを書き込む仕様となっているようです。これに対して、UNIX系OSでは一般的にUTCが用いら れます。その結果、9H の時間のずれが生じる可能性があります。
時間のずれが生じている場合には、以下の設定を行うと良いでしょう。
# hwclock --systohc
RTC(Real Time Clock)が正しく動かない ISA の仕様を実装したマシンでは、次のファイルに HWCLOCKPARS=--directisa という設定を行う必要があるようです。
/etc/init.d/hwclock.sh
HWCLOCKPARS=--directisa
この設定は再起動後に有効となり、毎回の起動時にこの設定が反映されます。
なお、この設定変更をした後は、忘れずにハードウェア・クロックの修正(-9H)も合わせて行ってください。