When I installed Fedora 44 recently, I forgot one important detail: I didn’t set the time zone. Oops. I live in the US, in the Central time zone, but Fedora thinks it is running in the Eastern time zone.
You can click an option when installing Fedora to let the system set the time zone automatically based on your IP address. This is a very handy feature for people with laptops who travel all the time.
Another way to use the time zone is to set every server to use the Coordinated Universal Time (UTC) time zone. If you’re running a server in a cluster or service pool, you should use UTC so that your systems will always agree on the time.
But this is a desktop machine, and it will always be in the Central time zone. I wanted to change it to use just the US Central time zone.
What is my time zone
There are two ways to check your time zone on modern Linux systems. For systems that use systemd, you can use timedatectl command. To view your system’s current time zone, use the timedatectl command with the status option. This displays several details about your system time, including the local time, universal time, whether or not your system is synchronized using a Network Time Protocol, and (most importantly, for me) what’s your time zone:
$ timedatectl status
Local time: Mon 2026-05-04 15:45:14 EDT
Universal time: Mon 2026-05-04 19:45:14 UTC
RTC time: Mon 2026-05-04 19:45:14
Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
From that output, I can see my system is currently set for the America/New_York time zone.
Another way to check the time zone is to look at the /etc/localtime file. This is also provided by systemd and is a symbolic link to a binary file that contains information about a specific time zone. The time zone files are located in the /usr/share/zoneinfo directory, such as /usr/share/zoneinfo/America/Chicago for the America/Chicago time zone, or /usr/share/zoneinfo/US/Central for the US/Central time zone. Since Chicago is in the US Central time zone, /usr/share/zoneinfo/America/Chicago and /usr/share/zoneinfo/US/Central contain the same time zone data. You can verify this for yourself by using a program like md5sum to view the checksums for each:
$ md5sum /usr/share/zoneinfo/US/Central /usr/share/zoneinfo/America/Chicago
6fa8d772c5ff1c47ca4b0ad477f72d48 /usr/share/zoneinfo/US/Central
6fa8d772c5ff1c47ca4b0ad477f72d48 /usr/share/zoneinfo/America/Chicago
So for my system, I want to set the time zone to either US/Central or America/Chicago. Both are correct, but I decided to set it to US/Central.
List available time zones
To set the time zone, you need to know the possible valid values. To do that, use the timedatectl command with the list-timezones command. This prints a long list (almost 600 entries) but I’m only interested in time zones that contain the text “central”, which should match my preferred US Central time zone. I also used grep to filter the list and print only those matching lines:
$ timedatectl list-timezones | wc -l
598
$ timedatectl list-timezones | grep -i central
Canada/Central
US/Central
Another way to list the available time zones is to look in the /usr/share/zoneinfo directory, which contains a list of all known time zones. For example, to see the US time zones, use ls to list the contents of the zoneinfo directory; some items are in subdirectories, such as America and US time zones:
$ ls -F /usr/share/zoneinfo/
Africa/ Cuba GMT+0 Japan Pacific/ tzdata.zi
America/ EET GMT-0 Kwajalein Poland UCT
Antarctica/ Egypt GMT0 leapseconds Portugal Universal
Arctic/ Eire Greenwich leap-seconds.list posix/ US/
Asia/ EST Hongkong Libya posixrules UTC
Atlantic/ EST5EDT HST MET PRC WET
Australia/ Etc/ Iceland Mexico/ PST8PDT W-SU
Brazil/ Europe/ Indian/ MST right/ zone1970.tab
Canada/ Factory Iran MST7MDT ROC zone.tab
CET GB iso3166.tab Navajo ROK Zulu
Chile/ GB-Eire Israel NZ Singapore
CST6CDT GMT Jamaica NZ-CHAT Turkey
And just for the US time zones:
$ ls -F /usr/share/zoneinfo/US
Alaska Arizona Eastern Hawaii Michigan Pacific
Aleutian Central East-Indiana Indiana-Starke Mountain Samoa
Set the time zone
To set my time zone to use Central time, I just needed to update the /etc/localtime file to point to the /usr/share/zoneinfo/US/Central file. I used the ln command with the -s option to create a symbolic link. I also added the -f option to “force” the removal of the existing /etc/localtime file at the same time, and the -v option so I could see the results of the command.
But I’m really cautious, so I tested it first by creating a link in the /tmp directory, using my general user account, like this:
$ ln -s -f -v /usr/share/zoneinfo/America/New_York /tmp/z
'/tmp/z' -> '/usr/share/zoneinfo/America/New_York'
$ ln -s -f -v /usr/share/zoneinfo/US/Central /tmp/z
'/tmp/z' -> '/usr/share/zoneinfo/US/Central'
$ ln -s -v ../usr/share/zoneinfo/US/Central /tmp/z
'/tmp/z' -> '../usr/share/zoneinfo/US/Central'
The first command created a link from /tmp/z for the America/New_York time zone. The /tmp/z file didn’t exist yet, so the ln command created a new file. The second command updated the link to point to the US/Central time zone. You need to use the -f option to change an existing link. The third command changed the link to use a path relative to the /tmp/z file, to point to the same US/Central time zone file. This is the same format that the system normally uses to set the link to the time zone.
That command worked as promised, so now I ran the correct command using sudo to change the /etc/localtime file instead:
$ sudo ln -s -f -v ../usr/share/zoneinfo/US/Central /etc/localtime
The new time should be recognized automatically by other apps on the system. If your desktop time doesn’t update right away, don’t worry; wait about a minute for your desktop’s clock app to check the time again, and it should automatically change to the new time.