For any OS installation, you must know your Time Zone. This is expressed in terms of a city, a state or a country. You must also decide how to set BIOS time, and we may follow two strategies here:
In this case you should set BIOS time to UTC time. DST changes will be dynamically managed by Time Zone configurations.
Windows handles time in a more primitive way than Linux. For Windows, BIOS time is allways your local time, so DST changes are more aggressive because they directly change hardware clock. And since both Linux and Windows initially get and set time from the hardware, when they are together, Linux must handle it in the same way. So set BIOS time to your localtime.
On Red Hat Linux and derived systems, you can set the hardware clock strategy and Time Zone using the timeconfig command, that shows a user-friendly dialog. You can also use it non-interactively:
Example 2. Time Configuration Tool
bash# timeconfig "Brasil/East" # set HC to localtime, and TZ to "Brazil/East" bash# timeconfig --utc "Brasil/East" # set HC to UTC, and TZ to "Brazil/East"
Anyway, it changes /etc/sysconfig/clock file that is read at boot time. You can edit it by hand, and that is how it looks:
I encourage you to set your hardware clock only after understanding how to get accurate time, described on Section 5.
The hwclock command reads and sets the hardware clock, based on several options you give to it, documented in its man page. But you don't have to use it if you have a modern Linux distribution. After defining your hardware clock strategy and Time Zone, you can use the high level setclock command to correctly set your hardware clock. You don't need to pass any parameters because setclock intelligently calls hwclock to set the BIOS based on your OS current date and time. So you should always use the setclock command.
But if you are a minimalist and prefer hard work, here are some hwclock examples:
Example 4. setclock and hwclock usage
bash# setclock # The easy way to set HC bash# hwclock # reads HC bash# hwclock --systohc --utc # set HC with UTC time based on OS current time bash# hwclock --systohc # set HC with local time based on OS current time bash# hwclock --set --date "21 Oct 2004 21:17" # set HC with time specified on string
Since the OS time is independent from the hardware clock, any BIOS change we make will take place in the next boot.
Another option to change HC is rebooting and accessing your computer BIOS screens. On IBM e-server zSeries platforms you'll have to do it on z/VM level, because Linux here runs on virtual machines created by z/VM.