Delhi Time Zone — Asia/Kolkata
IST · UTC+5:30 · No DST
The Asia/Kolkata timezone identifier covers all of India — 28 states, 8 union territories, and over 1.4 billion people on a single UTC+5:30 offset. The IANA tz database chose "Kolkata" (originally "Calcutta") as the representative city under its convention of naming identifiers after the most populous city at the time of creation — Kolkata held that distinction when the Olson database was first compiled in the 1980s. India's +5:30 offset (330 minutes ahead of UTC) is anchored to the 82°30′E meridian, which passes through Mirzapur, Uttar Pradesh — this longitude was chosen in 1906 as the mathematical midpoint between India's eastern extreme (97°E, Arunachal Pradesh) and western extreme (68°E, Kutch, Gujarat). Asia/Kolkata has been permanently fixed at UTC+5:30 since 1945, when WWII-era wartime hours ended, making it one of the world's most stable production timezones: zero DST transitions, zero offset changes since your grandparents were born.
Primary City — Delhi
All Cities in Asia/Kolkata 7,167
Showing top 100 cities by population. Use the filter to search all 7,167 cities.
| # | City | State / Province | Country | Population | Capital |
|---|---|---|---|---|---|
| 1 | Delhi | Delhi | India | 32.2M | admin |
| 2 | Mumbai | Mahārāshtra | India | 25.0M | admin |
| 3 | Kolkāta | West Bengal | India | 21.7M | admin |
| 4 | Bangalore | Karnātaka | India | 15.4M | admin |
| 5 | Chennai | Tamil Nādu | India | 12.4M | admin |
| 6 | Hyderābād | Telangāna | India | 10.5M | admin |
| 7 | Pune | Mahārāshtra | India | 8.2M | — |
| 8 | Ahmedabad | Gujarāt | India | 8.0M | minor |
| 9 | Sūrat | Gujarāt | India | 6.5M | — |
| 10 | Prayagraj | Uttar Pradesh | India | 6.0M | — |
| 11 | Belāhi | Bihār | India | 4.5M | — |
| 12 | Nādampālaiyam | Tamil Nādu | India | 3.5M | — |
| 13 | Lucknow | Uttar Pradesh | India | 3.4M | admin |
| 14 | Kannankulam | Kerala | India | 3.2M | — |
| 15 | Jaipur | Rājasthān | India | 3.1M | admin |
| 16 | Kottārasshēri | Kerala | India | 3.0M | — |
| 17 | Attadappa | Kerala | India | 2.6M | — |
| 18 | Barmhān Kalān | Madhya Pradesh | India | 2.5M | — |
| 19 | Mirzāpur | Uttar Pradesh | India | 2.5M | — |
| 20 | Nāgpur | Mahārāshtra | India | 2.4M | — |
| 21 | Ghāziābād | Uttar Pradesh | India | 2.4M | — |
| 22 | Supaul | Bihār | India | 2.2M | — |
| 23 | Vadodara | Gujarāt | India | 2.1M | — |
| 24 | Rājkot | Gujarāt | India | 2.0M | — |
| 25 | Vishākhapatnam | Andhra Pradesh | India | 2.0M | — |
| 26 | Indore | Madhya Pradesh | India | 2.0M | — |
| 27 | Thāne | Mahārāshtra | India | 1.9M | — |
| 28 | Bhopāl | Madhya Pradesh | India | 1.8M | admin |
| 29 | Āgra | Uttar Pradesh | India | 1.8M | — |
| 30 | Peyanvilai | Tamil Nādu | India | 1.8M | — |
| 31 | Pimpri-Chinchwad | Mahārāshtra | India | 1.7M | — |
| 32 | Patna | Bihār | India | 1.7M | admin |
| 33 | Bilāspur | Chhattīsgarh | India | 1.6M | — |
| 34 | Ludhiāna | Punjab | India | 1.6M | — |
| 35 | Madurai | Tamil Nādu | India | 1.6M | minor |
| 36 | Jamshedpur | Jhārkhand | India | 1.6M | — |
| 37 | Nāsik | Mahārāshtra | India | 1.5M | — |
| 38 | Vijayavāda | Andhra Pradesh | India | 1.5M | — |
| 39 | Farīdābād | Haryāna | India | 1.4M | — |
| 40 | Najafgarh | Delhi | India | 1.4M | — |
| 41 | Meerut | Uttar Pradesh | India | 1.3M | — |
| 42 | Jabalpur | Madhya Pradesh | India | 1.3M | — |
| 43 | Kalyān | Mahārāshtra | India | 1.2M | — |
| 44 | Vasai-Virar | Mahārāshtra | India | 1.2M | — |
| 45 | Pānīpat | Haryāna | India | 1.2M | — |
| 46 | Vārānasi | Uttar Pradesh | India | 1.2M | — |
| 47 | Kalleli | Kerala | India | 1.2M | — |
| 48 | Srīnagar | Jammu and Kashmīr | India | 1.2M | admin |
| 49 | Aurangābād | Mahārāshtra | India | 1.2M | — |
| 50 | Dhanbād | Jhārkhand | India | 1.2M | — |
| 51 | Amritsar | Punjab | India | 1.1M | — |
| 52 | Alīgarh | Uttar Pradesh | India | 1.1M | — |
| 53 | Guwāhāti | Assam | India | 1.1M | — |
| 54 | Hāora | West Bengal | India | 1.1M | — |
| 55 | Rānchi | Jhārkhand | India | 1.1M | admin |
| 56 | Gwalior | Madhya Pradesh | India | 1.1M | — |
| 57 | Chandīgarh | — | India | 1.1M | admin |
| 58 | Jodhpur | Rājasthān | India | 1.0M | — |
| 59 | Raipur | Chhattīsgarh | India | 1.0M | admin |
| 60 | Kota | Rājasthān | India | 1.0M | — |
| 61 | Bareilly | Uttar Pradesh | India | 1.0M | — |
| 62 | Coimbatore | Tamil Nādu | India | 960K | — |
| 63 | Solāpur | Mahārāshtra | India | 952K | — |
| 64 | Hubli | Karnātaka | India | 944K | — |
| 65 | Mysore | Karnātaka | India | 921K | — |
| 66 | Trichinopoly | Tamil Nādu | India | 917K | — |
| 67 | Morādābād | Uttar Pradesh | India | 890K | — |
| 68 | Tiruppūr | Tamil Nādu | India | 878K | — |
| 69 | Gurgaon | Haryāna | India | 877K | — |
| 70 | Jalandhar | Punjab | India | 874K | — |
| 71 | Bhubaneshwar | Odisha | India | 838K | admin |
| 72 | Narela | Delhi | India | 810K | — |
| 73 | Bhayandar | Mahārāshtra | India | 809K | — |
| 74 | Karīmnagar | Andhra Pradesh | India | 797K | — |
| 75 | Patiāla | Punjab | India | 763K | — |
| 76 | Shīshgarh | Uttar Pradesh | India | 754K | — |
| 77 | Colombo | Western | Sri Lanka | 753K | primary |
| 78 | Thiruvananthapuram | Kerala | India | 744K | admin |
| 79 | Durgāpur | West Bengal | India | 726K | — |
| 80 | Bhiwandi | Mahārāshtra | India | 710K | — |
| 81 | Bhīlwāra | Rājasthān | India | 709K | — |
| 82 | Sahāranpur | Uttar Pradesh | India | 705K | — |
| 83 | Warangal | Andhra Pradesh | India | 705K | — |
| 84 | Shiliguri | West Bengal | India | 701K | — |
| 85 | Salem | Tamil Nādu | India | 693K | — |
| 86 | Kochi | Kerala | India | 677K | — |
| 87 | Gorakhpur | Uttar Pradesh | India | 673K | — |
| 88 | Guntūr | Andhra Pradesh | India | 670K | — |
| 89 | Karaikandi | Assam | India | 659K | — |
| 90 | Haldwāni | Uttarākhand | India | 656K | — |
| 91 | Dhūlia | Mahārāshtra | India | 656K | — |
| 92 | Bhāvnagar | Gujarāt | India | 643K | — |
| 93 | Noida | Uttar Pradesh | India | 637K | — |
| 94 | Bhāngar | West Bengal | India | 634K | — |
| 95 | Bhilai | Chhattīsgarh | India | 625K | — |
| 96 | Mangalore | Karnātaka | India | 624K | — |
| 97 | Bihtā | Bihār | India | 617K | — |
| 98 | Hasanpur | Uttar Pradesh | India | 612K | — |
| 99 | Cuttack | Odisha | India | 606K | — |
| 100 | Salīmpur | Uttar Pradesh | India | 604K | — |
IST Conversion — IST ↔ IST Quick Reference
Based on current offset (UTC+5:30). Fixed year-round — no DST adjustment needed.
| Local Time (IST) | → | IST (India) |
|---|---|---|
| 12:00 AM | → | 12:00 AM |
| 6:00 AM | → | 6:00 AM |
| 9:00 AM | → | 9:00 AM |
| 12:00 PM | → | 12:00 PM |
| 5:00 PM | → | 5:00 PM |
| 9:00 PM | → | 9:00 PM |
Why Is the IANA Identifier "Asia/Kolkata" — Not "Asia/India" or "Asia/Delhi"?
The IANA timezone database (the Olson/tz database) follows one strict rule: each timezone identifier is anchored to the most populous city in the timezone at the time the identifier was created, never the national capital. When the tz database was first compiled in the 1980s, Kolkata (then Calcutta) was India's largest city by population. Delhi and Mumbai have since grown larger — but IANA only renames identifiers for compelling reasons, and population shifts don't qualify.
There is no "Asia/India" because timezone IDs must refer to cities, not countries. Country-named identifiers would collide when a nation has multiple timezones (the USA has six) and would invite political disputes. The identifier was Asia/Calcutta until 1993, when it was renamed to Asia/Kolkata following India's official city renaming. The old name remains as a deprecated backward-compatibility alias and still works on all modern systems.
Asia/Kolkata vs IST — Machine Identifier vs Human Abbreviation
Both refer to UTC+5:30, but they serve different audiences. Use Asia/Kolkata in code; use "IST" only in human-facing text where context is unambiguous.
| Property | Asia/Kolkata | IST |
|---|---|---|
| Type | IANA identifier — machine-readable | Abbreviation — human-readable |
| Uniqueness | Globally unique in the tz database | Ambiguous — 3 timezones share "IST" |
| Other "IST" zones | — | Israel Standard Time (UTC+2), Irish Standard Time (UTC+1) |
| In JavaScript | {timeZone:'Asia/Kolkata'} — works in all JS engines | {timeZone:'IST'} — rejected or misidentified |
| UTC offset | UTC+5:30 (fixed) | UTC+5:30 |
| DST | Not observed since 1945 | Not observed |
⚠️ Never use IST in timezone config files, databases, or API payloads. Always use Asia/Kolkata.
UTC+5:30 History — How India's Offset Evolved Since 1880
Before British colonial standardisation, every Indian city observed its own local mean solar time based on the sun's position overhead. The journey to today's fixed UTC+5:30 passed through several distinct phases:
| Period | Offset | Notes |
|---|---|---|
| Before 1880 | Local mean time | Bombay: UTC+4:51 · Madras: UTC+5:20:41 · Calcutta: UTC+5:53:20. Each city based on local sun position. |
| 1880–1905 | Multiple local times | Madras time used on the Great Indian Peninsula Railway. Calcutta and Bombay kept own civic times. |
| 1 Jan 1906 | UTC+5:30 — IST established | Standardised on 82°30′E meridian (Mirzapur, UP). Chosen as midpoint between India's eastern (97°E) and western (68°E) extremes. |
| 1941–1945 (WWII) | UTC+6:30 — "War Time" | Clocks advanced 1 hour for wartime fuel conservation and alignment with Eastern theatre operations. |
| 15 Aug 1945 | UTC+5:30 — restored | Reverted to IST after Japan's surrender. This was the last time India ever used any form of DST. |
| 15 Aug 1947+ | UTC+5:30 — unchanged | Independent India retained IST. No change since, despite several government proposals over the decades. |
Asia/Calcutta → Asia/Kolkata: The 1993 Deprecation
In 1993, the IANA tz database renamed Asia/Calcutta to Asia/Kolkata following India's official city renaming. The original identifier remains in the database as a deprecated backward-compatibility link — it silently maps to Asia/Kolkata on all modern operating systems so that legacy code does not break.
Asia/Calcutta, it still works today — but it is officially deprecated. Search your repositories for Asia/Calcutta and replace with Asia/Kolkata. Verify with: zdump Asia/Calcutta — output will be identical to zdump Asia/Kolkata.
What Countries Use UTC+5:30?
Only two sovereign countries permanently observe UTC+5:30:
- India — all 28 states and 8 union territories, 1.4 billion people. Official name: Indian Standard Time (IST). Fixed year-round since 1945.
- Sri Lanka — ~22 million people. Official name: Sri Lanka Standard Time (SLST). Sri Lanka briefly used UTC+6:30 and UTC+6 between 1996 and 2006 but has been stably at UTC+5:30 since May 2006.
Close neighbours — but not UTC+5:30:
- Nepal — UTC+5:45 (Nepal Standard Time). The extra 15 minutes are Nepal's deliberate differentiation from India.
- Pakistan — UTC+5 (Pakistan Standard Time, PKT). 30 minutes behind IST.
- Bangladesh — UTC+6 (Bangladesh Standard Time, BST). 30 minutes ahead of IST.
- Maldives — UTC+5 (Maldives Time, MVT).
Developer Guide — Asia/Kolkata is DST-Free
Asia/Kolkata has zero DST transitions since 1945. Unlike America/New_York or Europe/London, which shift UTC offset twice per year, Asia/Kolkata is permanently fixed. This dramatically simplifies date arithmetic — but one mistake is common:
Hardcoding +05:30 is fragile
The offset +05:30 happens to be correct today, but hardcoding an offset string instead of the IANA identifier is bad practice. It breaks pre-1945 historical queries, is not a valid timeZone argument in most engines, and fails to communicate intent to future readers of your code.
// ❌ Fragile — raw offset not valid in Intl API
new Date().toLocaleString('en-IN', { timeZone: '+05:30' });
// ✅ Correct — IANA identifier
new Date().toLocaleString('en-IN', { timeZone: 'Asia/Kolkata' }); What zdump shows
On Linux/macOS, zdump -v Asia/Kolkata | tail -5 shows the last recorded transition was 6 September 1945. After that: no transitions. The timezone data is a flat line from 1945 to the end of the IANA database.
Code Snippets: Asia/Kolkata in 7 Languages
const fmt = new Intl.DateTimeFormat('en-IN', {
timeZone: 'Asia/Kolkata',
dateStyle: 'medium',
timeStyle: 'long'
});
console.log(fmt.format(new Date())); import pytz
from datetime import datetime
ist = pytz.timezone('Asia/Kolkata')
now = datetime.now(ist)
print(now.strftime('%Y-%m-%d %H:%M:%S %Z')) from zoneinfo import ZoneInfo
from datetime import datetime
now = datetime.now(ZoneInfo('Asia/Kolkata'))
print(now) # 2026-03-20 14:30:00+05:30 import java.time.*;
ZoneId kolkata = ZoneId.of("Asia/Kolkata");
ZonedDateTime now = ZonedDateTime.now(kolkata);
// 2026-03-20T14:30:00+05:30[Asia/Kolkata] loc, _ := time.LoadLocation("Asia/Kolkata")
now := time.Now().In(loc)
fmt.Println(now.Format(time.RFC3339))
// 2026-03-20T14:30:00+05:30 -- Convert stored UTC timestamp to IST SELECT created_at AT TIME ZONE 'Asia/Kolkata' FROM orders; -- Current IST time SELECT NOW() AT TIME ZONE 'Asia/Kolkata';
$tz = new DateTimeZone('Asia/Kolkata');
$now = new DateTime('now', $tz);
echo $now->format('Y-m-d H:i:s P');
// 2026-03-20 14:30:00 +05:30 TZ='Asia/Kolkata' date # Fri Mar 20 14:30:00 IST 2026 # Permanent for session: export TZ='Asia/Kolkata'
The 82°30′E Meridian — Why India's Timezone Is UTC+5:30, Not UTC+5 or UTC+6
Indian Standard Time is anchored to the 82°30′E meridian. The math is direct: longitude ÷ 15 = UTC offset in hours. 82.5°E ÷ 15 = 5.5 hours = UTC+5:30. The +5:30 offset was not a political compromise — it was the straightforward solar-time calculation for the chosen meridian.
The 82.5°E line was chosen in 1906 as the mathematical midpoint between India's western extreme (~68°E, Kutch, Gujarat) and eastern extreme (~97°E, Arunachal Pradesh–Myanmar border). This meridian physically passes through Mirzapur, Uttar Pradesh — a mid-sized city on the Ganges with no special significance beyond lying on this line. You may see IST described as "Mirzapur time" in older documents for this reason.
India spans 30 degrees of longitude — about 2 hours of solar time. The sun rises roughly 1 hour earlier in Agartala (Tripura, 91°E) than in Ahmedabad (Gujarat, 72°E), yet both cities use the same clock. In parts of Arunachal Pradesh the sun rises before 4 AM by clock time in summer — a regularly cited argument for a northeast India timezone (UTC+6:30). As of 2026, no second Indian timezone has been enacted.