See the time
To see the time on a Debian GNU/Linux system, use the command date without arguments. It will show system time respecting the currently defined timezone.
To see the time in the UTC timezone, use the command date --utc (or its shorthand, date -u). See the date manual page.
Set the time manually
When setting the system time manually using date directly, the required time specification format may be confusing (by POSIX convention has to be MMDDhhmmYYYY). However, when using the --set argument, date accepts the date and time in many formats. You can read date' manual page, or use the example below for one possible and very useful format. The --set argument examples below are specified in the ISO 8601 standard's extended format as YYYY-MM-DD for Year-Month-DayOfMonth, and time of day HH:MM:SS using 24 hour clock. Leading zeros are significant.
date --set 1998-11-02 date --set 21:08:00
The above two commands set the system date to second of November, 1998, and system time to eight minutes past nine, PM.
Note: using the date command only sets the runtime system time (aka. software clock) but has no effect on the underlying hardware clock (aka. RTC = real time clock). When the system boots, it has no concept of absolute time and will populate the system time with the date and time read from the hardware clock, thus to ensure that the time set using date is kept across reboots it has to be saved to the hardware clock.
Setting the hardware clock
To write the current system time to the hardware clock so that it can be recovered on subsequent restarts of the system, correct the system time as above, then use the command hwclock --systohc to save it to hardware (see the hwclock manual page for more options).
Modern Debian releases (2.2 and onwards) automatically save the system time to hardware clock on proper shutdowns, and set the system clock from hardware clock when they boot up. This is done by the script /etc/init.d/hwclock.sh.
Set the time automatically
The protocol used to set the time is the Network Time Protocol or NTP. To set the time automatically you need access to an NTP server. Your local network may provide such a server but most people need to access an NTP server via the internet.
On the internet there are time servers that provide the correct time. Your ISP may provide a time service and this would be your closest and probably most accurate source. While there are still many independent NTP servers you can connect to, the best source is http://pool.ntp.org.
It's really quite easy on Debian. Just run:
apt-get install ntp
On Debian Bookworm (and later) ntp is a transitional package to ntpsec, so do:
apt-get install ntpsec
Because the pool is global, you should adjust
And on Debian Bookworm (and later), the configation file is
to use more local sources. Change the
where XX is your continent or two letter country code. Click on the continent to see the valid country codes (e.g., CA for Canada, etc).
For increased accuracy you can include extra server lines such as
server 0.XX.pool.ntp.org server 1.XX.pool.ntp.org
incrementing the number for each line. Two or three should be all you need.
Hardware clock and system time when dual booting
While Debian prefer to keep the hardware clock in UTC (this prevents the need to change it on daylight savings and timezone changes) other systems (like Windows) by default keeps the hardware clock synchronized to local time. To keep the hardware clock sane and the time correctly displayed by multiple systems they need to agree on which timezone the hardware clock is kept at.
In Debian the timezone for the hardware clock is configured in the file /etc/adjtime:
0.000000 14602224559 0.000000 1460224559 UTC
Edit /etc/adjtime and change "UTC" to "LOCAL" if you want the hardware clock to be kept at local time instead of UTC.
You need to use sudo or su to edit this file. Any editor will work, but nano or vi are normal choices.
8.9. Other Configurations: Time Synchronization, Logs, Sharing Access… - The Debian Administrator's Handbook