South Africa runs on one clock. Every city, every server, every airport: same time, all year. The IANA identifier Africa/Johannesburg is the canonical name for that clock. If your system hardcodes UTC+2 instead, it will break the moment legislation changes. Use the identifier.

What does Africa/Johannesburg cover?

All of South Africa. Cape Town, Durban, Pretoria, Bloemfontein, every farm in the Karoo. No separate zone exists for any other South African city.

  • Offset: UTC+2 year-round
  • Abbreviation: SAST (South Africa Standard Time)
  • Daylight saving: None. South Africa has not observed DST since 1944.
  • Shared offset: This zone is identical to Central Africa Time (CAT). Countries using the same UTC+2 offset without DST include Zimbabwe, Zambia, Mozambique, Botswana, Eswatini, Lesotho, Malawi, Namibia (since 2017), Libya, Egypt, Sudan, South Sudan, Rwanda, Burundi and eastern DRC.

How is Africa/Johannesburg different from other African zones?

DST policy. Some African zones shift; Johannesburg never does.

Zone Offset(s) DST?
Africa/Johannesburg UTC+2 No
Africa/Cairo UTC+2 (winter), UTC+3 (summer) Yes
Africa/Casablanca UTC+1, shifts for Ramadan Yes, variable
Africa/Lagos UTC+1 No
Africa/Nairobi UTC+3 No
Africa/Tunis UTC+1 (winter), UTC+2 (summer) Yes

If your application assumes all African zones are UTC+2 and DST-free, it will fail for Egypt, Morocco and Tunisia.

Using Africa/Johannesburg in code

Python (zoneinfo)

```python from zoneinfo import ZoneInfo from datetime import datetime

jhb = ZoneInfo("Africa/Johannesburg") now = datetime.now(jhb) print(now.tzname()) # 'SAST' ```

The Python zoneinfo module (standard library since Python 3.9) uses the IANA database directly. No third-party library needed.

JavaScript (Intl)

javascript const now = new Date(); const options = { timeZone: "Africa/Johannesburg", timeStyle: "full" }; console.log(new Intl.DateTimeFormat("en-ZA", options).format(now));

JavaScript's Intl API accepts IANA zone names natively. Do not hardcode offsets: use the identifier.

What do locals call Africa/Johannesburg time?

The Unicode Common Locale Data Repository (CLDR) supplies localised names for Africa/Johannesburg:

  • English: South Africa Standard Time
  • Afrikaans: Suid-Afrikaanse Standaardtyd
  • isiZulu: Isikhathi Esemgangathweni YaseNingizimu Afrika

CLDR also maps short names: "SAST" is the preferred abbreviation in all English locales. Pull CLDR data when your application displays time zone names in the user's language.

Why use the IANA identifier instead of a UTC offset?

Three reasons.

  1. Stability. The identifier Africa/Johannesburg has not changed since it was added to the database. Even if South Africa adopted DST tomorrow, the identifier would stay the same; only the rules would update.
  2. Correctness. Hardcoding UTC+2 breaks when governments change offsets. Namibia switched from UTC+1/+2 to permanent UTC+2 in 2017. An IANA-aware system handled that automatically.
  3. Portability. Africa/Johannesburg works in Python, JavaScript, Java, PHP, Ruby, Go, Rust, .NET and every major operating system's time zone files. You write it once.

Does Africa/Johannesburg cover only Johannesburg?

No. It covers all of South Africa. There is no separate zone for Cape Town, Durban, Pretoria or any other location.

Is SAST the same as CAT?

Functionally yes. Both are UTC+2 without DST. The difference is naming: SAST is used by South Africa, CAT by most of its neighbours. In scheduling software they are interchangeable, but use the IANA identifier Africa/Johannesburg for South Africa and Africa/Maputo or Africa/Harare for CAT countries.

Why doesn't Africa/Johannesburg have daylight saving time?

South Africa ran DST during World War II (1942-1944) and abandoned it. A brief discussion during the 2008 energy crisis produced no legislation. As of 2026, no active parliamentary bill proposes a change.

What happens when the UK or US changes clocks?

The gap between Johannesburg and cities that observe DST shifts twice a year. On 15 January 2026, London is 2 hours behind Johannesburg. On 15 July 2026, London is only 1 hour behind. New York is 7 hours behind in January and 6 hours behind in July. Code using IANA identifiers handles this automatically; hardcoded offsets do not.

Is there a separate IANA zone for South African holidays?

No. Public holidays are not part of the time zone database. Use the python-holidays package or a similar library. South Africa's public holidays for 2026 include New Year's Day (1 January), Human Rights Day (21 March), Good Friday (3 April), Family Day (6 April), Freedom Day (27 April), Workers' Day (1 May), Youth Day (16 June), National Women's Day (9 August, observed 10 August), Heritage Day (24 September), Local Government Elections (4 November), Day of Reconciliation (16 December), Christmas Day (25 December) and Day of Goodwill (26 December). When a holiday falls on a Sunday, the Monday is observed.