Project Management & Agile Module 4 – Scheduling: networks, critical path and Gantt charts
Gantt charts, calendars and schedule baselines
Put a schedule network on a working calendar with holidays, save a baseline, update it with actual progress, and read a Gantt chart for slips and gaps.
What you will learn
- Schedule a network on working calendars with holidays and compare the dates they give
- Set a schedule baseline and update the schedule with actual progress at a status date
- Read a Gantt chart for slippage, missing logic and crowded weeks
- Evaluate a schedule against GAO's four characteristics of a reliable schedule
Before you start
What you’ll learn · Before you start
What you will learn
- Schedule a network on working calendars with holidays and compare the dates they give
- Set a schedule baseline and update the schedule with actual progress at a status date
- Read a Gantt chart for slippage, missing logic and crowded weeks
- Evaluate a schedule against GAO's four characteristics of a reliable schedule
Before you start
On this page
The tech fest needs 38 working days, but “38 working days” is not a date anyone can put on a poster. Starting on the same Monday, the network finishes on the Thursday of its eighth week on one calendar and on the Tuesday of its ninth week on another that closes on just two more weekdays. Which one is right depends on whose holidays the team keeps.
You will put a network on working calendars, save a baseline, update the schedule with actual progress at a status date, read a Gantt chart for what it shows and what it hides, and test a schedule against GAO’s four characteristics of a reliable one.
A Gantt chart puts the network on a working calendar
A Gantt chart: A view of a schedule that draws each activity as a bar on a calendar, from its start date to its finish date; the dates come from the network, not from the chart. draws each activity as a bar on a calendar, from its start date to its finish date. It is a view of the schedule, not the schedule itself: the dates come from the network and its passes, and then from a project calendar: The rule that says which days a schedule may use for work: the working week and the holidays. A person or a resource may have a calendar of its own. that says which days are worked. The program below takes the fest’s 38 working days and puts them on two calendars, both Monday to Friday from the same Monday. Calendar 1 closes on the Central Government’s compulsory holidays in the window; calendar 2 also closes on two restricted holidays that the whole team has chosen to take:
"""Puts the tech fest network on two working calendars and draws its Gantt chart as text.
The network and its durations (working days) are the critical path lesson's. Both calendars work Monday to Friday
from Monday 2 November. Calendar 1 closes on the Central Government's compulsory holidays in that window (DoPT
O.M. No. 12/2/2023-JCA, the holidays of 2026: Guru Nanak's Birthday on Tuesday 24 November and Christmas on Friday 25
December; Diwali falls on Sunday 8 November, a weekly off, and no substitute day is given). Calendar 2 also closes on
two restricted holidays the whole team takes: Govardhan Puja (Monday 9 November) and Bhai Duj (Wednesday 11 November).
"""
from datetime import date, timedelta
FEST = {
"S": ("Milestone: start", 0, []),
"A": ("Authorise plan and budget", 3, [("S", "FS", 0)]),
"B": ("Book the auditorium", 2, [("A", "FS", 0)]),
"C": ("Prepare sponsor packages", 5, [("A", "FS", 0)]),
"D": ("Sign sponsors", 10, [("C", "FS", 0)]),
"E": ("Design the coding contest", 8, [("A", "FS", 0)]),
"F": ("Build the robotics arena", 12, [("D", "FS", 0)]),
"G": ("Line up speakers", 6, [("B", "FS", 0)]),
"H": ("Build the registration form", 4, [("E", "FS", 0)]),
"I": ("Run the publicity campaign", 10, [("H", "SS", 2)]),
"J": ("Print posters", 3, [("G", "FS", 0)]),
"K": ("Plan crowd control and first aid", 5, [("B", "FS", 0)]),
"L": ("Set up sound, lights and stage", 2, [("F", "FS", 0), ("K", "FS", 0)]),
"M": ("Hold the fest", 2, [("L", "FS", 0), ("H", "FS", 0), ("J", "FS", 0), ("I", "FF", 0)]),
"N": ("Close the accounts and report", 4, [("M", "FS", 0)]),
"Z": ("Milestone: finish", 0, [("N", "FS", 0)]),
}
START = date(2026, 11, 2)
CENTRAL = {date(2026, 11, 24): "Guru Nanak's Birthday", date(2026, 12, 25): "Christmas Day"}
TEAM = CENTRAL | {date(2026, 11, 9): "Govardhan Puja", date(2026, 11, 11): "Bhai Duj"}
def early_dates(net):
"""The forward pass: early start and finish of every activity, in working days from the start."""
es, ef = {}, {}
for a, (_, days, links) in net.items():
start = 0
for p, kind, lag in links:
start = max(start, {"FS": ef[p] + lag, "SS": es[p] + lag, "FF": ef[p] + lag - days}[kind])
es[a], ef[a] = start, start + days
return es, ef
def working_days(holidays, count):
"""The dates of working days 1 to count: Monday to Friday, without the holidays."""
days, d = [], START
while len(days) < count:
if d.weekday() < 5 and d not in holidays:
days.append(d)
d += timedelta(days=1)
return days
def fmt(d):
return d.strftime("%a %d %b")
es, ef = early_dates(FEST)
end = max(ef.values())
cal1, cal2 = working_days(CENTRAL, end), working_days(TEAM, end)
print(f"{end} working days from {START:%A %d %B}, on two calendars")
print(f"{'Id':<4}{'Calendar 1':<25}{'Calendar 2'}")
for a, (name, days, _) in FEST.items():
if days:
one = f"{fmt(cal1[es[a]])} - {fmt(cal1[ef[a] - 1])}"
two = f"{fmt(cal2[es[a]])} - {fmt(cal2[ef[a] - 1])}"
else:
day = es[a] if es[a] < end else end - 1
one, two = fmt(cal1[day]), fmt(cal2[day])
print(f"{a:<4}{one:<25}{two}")
print(f"Finish: {fmt(cal1[-1])} on calendar 1, {fmt(cal2[-1])} on calendar 2 "
f"({(cal2[-1] - cal1[-1]).days} calendar days later, for {len(TEAM) - len(CENTRAL)} more closed weekdays)")
print()
# The Gantt chart of calendar 1: one column per weekday, # where an activity works, + for a holiday it spans, and a
# last row that counts the activities at work on each weekday.
weekdays = []
d = START
while d <= cal1[-1]:
if d.weekday() < 5:
weekdays.append(d)
d += timedelta(days=1)
busy = [0] * len(weekdays)
print("Gantt chart, calendar 1 (one column per weekday, + a holiday, n activities at work)")
print(" " + "".join(f"{'W' + str(i // 5 + 1):<5}" for i in range(0, len(weekdays), 5)))
print(" " + "".join("MTWTF"[d.weekday()] for d in weekdays))
for a, (name, days, _) in FEST.items():
if not days:
continue
first, last = cal1[es[a]], cal1[ef[a] - 1]
row = "".join("#" if first <= d <= last and d not in CENTRAL else "+" if first <= d <= last else "." for d in weekdays)
print(f"{a:<3}{row}")
for i, mark in enumerate(row):
busy[i] += mark == "#"
print("n " + "".join(str(n) for n in busy))
print("Most activities at work on one day:", max(busy), "in week", busy.index(max(busy)) // 5 + 1) Output
38 working days from Monday 02 November, on two calendars Id Calendar 1 Calendar 2 S Mon 02 Nov Mon 02 Nov A Mon 02 Nov - Wed 04 Nov Mon 02 Nov - Wed 04 Nov B Thu 05 Nov - Fri 06 Nov Thu 05 Nov - Fri 06 Nov C Thu 05 Nov - Wed 11 Nov Thu 05 Nov - Fri 13 Nov D Thu 12 Nov - Thu 26 Nov Mon 16 Nov - Mon 30 Nov E Thu 05 Nov - Mon 16 Nov Thu 05 Nov - Wed 18 Nov F Fri 27 Nov - Mon 14 Dec Tue 01 Dec - Wed 16 Dec G Mon 09 Nov - Mon 16 Nov Tue 10 Nov - Wed 18 Nov H Tue 17 Nov - Fri 20 Nov Thu 19 Nov - Wed 25 Nov I Thu 19 Nov - Thu 03 Dec Mon 23 Nov - Mon 07 Dec J Tue 17 Nov - Thu 19 Nov Thu 19 Nov - Mon 23 Nov K Mon 09 Nov - Fri 13 Nov Tue 10 Nov - Tue 17 Nov L Tue 15 Dec - Wed 16 Dec Thu 17 Dec - Fri 18 Dec M Thu 17 Dec - Fri 18 Dec Mon 21 Dec - Tue 22 Dec N Mon 21 Dec - Thu 24 Dec Wed 23 Dec - Tue 29 Dec Z Thu 24 Dec Tue 29 Dec Finish: Thu 24 Dec on calendar 1, Tue 29 Dec on calendar 2 (5 calendar days later, for 2 more closed weekdays) Gantt chart, calendar 1 (one column per weekday, + a holiday, n activities at work) W1 W2 W3 W4 W5 W6 W7 W8 MTWTFMTWTFMTWTFMTWTFMTWTFMTWTFMTWTFMTWT A ###.................................... B ...##.................................. C ...#####............................... D ........########+##.................... E ...########............................ F ...................############........ G .....######............................ H ...........####........................ I .............###+#######............... J ...........###......................... K .....#####............................. L ...............................##...... M .................................##.... N ...................................#### n 111334444433343202222222111111111111111 Most activities at work on one day: 4 in week 2
Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 gantt.py
Both calendars give every activity the same working days, so the Gantt chart is the same shape for both; only the
dates under it change. Calendar 2’s two extra closed days, both in the second week, push every later activity back
two working days, and the finish moves from the Thursday of week 8 to the Tuesday of week 9, five calendar days. Two
days became five because the shifted end crosses a weekend and Christmas Day. In the chart, + marks the holiday inside D’s
and I’s bars: work stops for a day, and the bar simply runs one day longer.
Whose holidays the calendar keeps
The Department of Personnel and Training publishes the Central Government’s holidays each year: Guru Nanak’s Birthday, on the Tuesday of week 4, and Christmas Day, on the Friday of week 8, fall inside the fest’s window, while Diwali falls on a Sunday and no substitute day is given. Each employee may also take two restricted holidays. State governments publish their own lists, and the Reserve Bank of India’s holiday matrix shows that bank holidays differ from one city to the next, so a team spread across states needs one calendar per place, or a project calendar everyone agrees to.
Teams in other countries add a second question, the hours they share. India Standard Time is UTC+05:30 all year: the IANA time zone database records no daylight saving for Asia/Kolkata since 1945. Partners in Europe and North America change their clocks twice a year, so the hours a team in Pune shares with one in London or Toronto move by an hour each time, and a weekly call can fall out of the overlap.
A baseline is the plan that progress is measured against
Once the owners agree the dates, a copy is saved as the schedule baseline: A saved copy of the agreed schedule, kept unchanged so that each update can be compared with it; it changes only for new or removed scope or a formal replan.. GAO’s guide makes maintaining it the tenth best practice: progress is measured, monitored and reported against it, and it is set promptly once the work begins. From then on the schedule is updated at each status date: The date up to which a schedule update records actual starts, finishes and remaining work; forecasts are calculated from it. with actual starts and finishes and the days each running activity still needs, which the guide calls statusing, and recalculated through its links. Follow the fest’s schedule through its versions:
- Draft
Network, durations and calendar agreed with the owners
The 14 activities, their 19 links and their durations are agreed with the people who will do the work, and the schedule is put on calendar 1. The finish comes out on working day 38, the Thursday of week 8.
- Baseline
The plan everyone measures against saved once
Before work starts, a copy of these dates is saved as the baseline. GAO's guide asks for it to be set promptly and to record what the stakeholders agreed about the order of work and the key dates. From now on it does not move with the work.
- Each week
Actual dates and remaining days go in
Owners report actual starts and finishes and the days each running activity still needs. The schedule is recalculated through its links, and the forecast is compared with the baseline, activity by activity.
- Day 20 update
Two slips, and only one moves the finish
E, the contest design, took 2 days more, and its chain has 11 days of float, so the finish holds. D, signing sponsors, needs 3 days more and is on the critical path, so the forecast finish moves 3 working days, from the Thursday of week 8 to the Wednesday of week 9.
- Next wave
Detail added as work comes closer
In a longer project, near-term work is planned as detailed activities and later work as planning packages, which are broken down as they come within reach. GAO's guide calls this rolling wave planning.
- Re-baseline
Rare, and only when the plan changes for good rare
The baseline changes for new or removed scope, or a formal replan when the old target is no longer realistic. GAO's guide warns that a schedule re-baselined often points to scope that is not understood or to weak estimates.
The timeline has 6 events, from Draft to Re-baseline.
At the end of working day 20, the Monday of week 5, the team reports two slips: designing the coding contest took 10 days instead of 8, and signing sponsors needs one more day though its baseline finish has passed. The update keeps the logic and lets the program move only what the actual dates push:
"""Updates the tech fest schedule at a status date and compares the forecast with the baseline.
The baseline is the fest's schedule on calendar 1 (Monday to Friday from Monday 2 November, closed on Guru Nanak's
Birthday and Christmas Day), saved before work began. At the status date, the end of working day 20, the team reports:
E, design the coding contest, took 10 days instead of 8; D, sign sponsors, is still running and needs 1 more day; every
other activity that should have started has gone to plan. The update keeps the logic and moves only what the actuals
and the remaining work push, as GAO's best practice 9 asks.
"""
from datetime import date, timedelta
FEST = {
"S": (0, []), "A": (3, [("S", "FS", 0)]), "B": (2, [("A", "FS", 0)]), "C": (5, [("A", "FS", 0)]),
"D": (10, [("C", "FS", 0)]), "E": (8, [("A", "FS", 0)]), "F": (12, [("D", "FS", 0)]), "G": (6, [("B", "FS", 0)]),
"H": (4, [("E", "FS", 0)]), "I": (10, [("H", "SS", 2)]), "J": (3, [("G", "FS", 0)]), "K": (5, [("B", "FS", 0)]),
"L": (2, [("F", "FS", 0), ("K", "FS", 0)]), "M": (2, [("L", "FS", 0), ("H", "FS", 0), ("J", "FS", 0), ("I", "FF", 0)]),
"N": (4, [("M", "FS", 0)]), "Z": (0, [("N", "FS", 0)]),
}
HOLIDAYS = {date(2026, 11, 24), date(2026, 12, 25)}
STATUS = 20 # the end of working day 20
ACTUAL = {"E": (3, 13)} # activities that finished off plan: (actual start, actual finish)
REMAINING = {"D": 1} # activities in progress at the status date: working days still needed
def forward(net, actual=None, remaining=None, status=0):
"""The forward pass. Activities in actual keep their actual dates; those in remaining finish that many working
days after the status date; every other activity follows its links and its planned duration."""
actual, remaining = actual or {}, remaining or {}
es, ef = {}, {}
for a, (days, links) in net.items():
start = 0
for p, kind, lag in links:
start = max(start, {"FS": ef[p] + lag, "SS": es[p] + lag, "FF": ef[p] + lag - days}[kind])
if a in actual:
es[a], ef[a] = actual[a]
elif a in remaining:
es[a], ef[a] = start, status + remaining[a]
else:
es[a], ef[a] = start, start + days
return es, ef
def calendar(count):
days, d = [], date(2026, 11, 2)
while len(days) < count:
if d.weekday() < 5 and d not in HOLIDAYS:
days.append(d)
d += timedelta(days=1)
return days
base_es, base_ef = forward(FEST)
now_es, now_ef = forward(FEST, ACTUAL, REMAINING, STATUS)
cal = calendar(max(now_ef.values()) + 1)
day = lambda n: cal[n - 1].strftime("%a %d %b") if n else cal[0].strftime("%a %d %b")
print(f"Status date: the end of working day {STATUS}, {day(STATUS)}")
print(f"{'Id':<4}{'Baseline finish':<17}{'Forecast finish':<17}{'Variance':>8} State")
for a, (days, _) in FEST.items():
if a in ACTUAL or now_ef[a] <= STATUS:
state = "finished"
elif now_es[a] < STATUS:
left = now_ef[a] - STATUS
state = f"in progress, {left} day{'s' if left != 1 else ''} left"
else:
state = "not started"
variance = now_ef[a] - base_ef[a]
print(f"{a:<4}{day(base_ef[a]):<17}{day(now_ef[a]):<17}{variance:>+8} {state}")
late = [a for a in FEST if now_ef[a] > base_ef[a] and a not in ("Z",)]
print(f"Finish: baseline {day(base_ef['Z'])}, forecast {day(now_ef['Z'])}, "
f"{now_ef['Z'] - base_ef['Z']:+d} working days")
print("Late against the baseline:", ", ".join(late)) Output
Status date: the end of working day 20, Mon 30 Nov Id Baseline finish Forecast finish Variance State S Mon 02 Nov Mon 02 Nov +0 finished A Wed 04 Nov Wed 04 Nov +0 finished B Fri 06 Nov Fri 06 Nov +0 finished C Wed 11 Nov Wed 11 Nov +0 finished D Thu 26 Nov Tue 01 Dec +3 in progress, 1 day left E Mon 16 Nov Wed 18 Nov +2 finished F Mon 14 Dec Thu 17 Dec +3 not started G Mon 16 Nov Mon 16 Nov +0 finished H Fri 20 Nov Wed 25 Nov +2 finished I Thu 03 Dec Mon 07 Dec +2 in progress, 5 days left J Thu 19 Nov Thu 19 Nov +0 finished K Fri 13 Nov Fri 13 Nov +0 finished L Wed 16 Dec Mon 21 Dec +3 not started M Fri 18 Dec Wed 23 Dec +3 not started N Thu 24 Dec Wed 30 Dec +3 not started Z Thu 24 Dec Wed 30 Dec +3 not started Finish: baseline Thu 24 Dec, forecast Wed 30 Dec, +3 working days Late against the baseline: D, E, F, H, I, L, M, N
Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 status.py
Eight activities are now late against the baseline, but they fall into two groups. E’s 2 days moved H and I by 2 days each and went no further, because that chain had 11 days of float. D’s 3 days moved F, L, M and N by 3 working days each, and the finish from the Thursday of week 8 to the Wednesday of week 9. The baseline itself did not move, and that is the point: it is the yardstick that makes the 3 days visible. GAO’s guide asks for a re-baseline only for new or removed scope or a formal replan, and it warns that frequent re-baselining hides variances.
Checkpoint
Check: Working calendars and holidays · Baselines and status updates
Reading a Gantt chart: slips, missing logic and crowded weeks
A Gantt chart is the most read view of a schedule, so it pays to know what it can show and what it cannot. Look back at the fest’s chart and its last row, which counts the activities at work on each weekday:
| What to look for | Where it shows | What it may mean |
|---|---|---|
| Bars right of their baseline | Tools draw the baseline as a second, thin bar | A slip: check the activity’s float before reacting |
| Many bars stacked in one week | The fest’s count reaches 4 in week 2 | People or rooms may be overloaded; check owners |
| A bar that ends with nothing after it | Only visible when links are drawn | An open end, so its float is not real |
| Bars that never touch | Week 8 has one activity, N, alone | Fine here, since N follows M; elsewhere a gap may hide a missing link |
The chart’s weakness is the logic. Bars show dates, not links, so a plan with the open end and the lag in place of a link from the first lesson of this module would draw a Gantt chart that looks just as tidy. Read a chart with its links shown, or beside the network check, and never fix a date by dragging a bar: the next recalculation puts it back, or worse, a fixed date becomes a constraint that hides the logic.
Dragging a bar to the date the sponsor wants
Wrong: moving the fest’s bar a week earlier by typing a date in. Right: change a duration, a link or the scope, recalculate, and see which date the network gives. A typed date is a constraint, and constraints are what made the critical path lesson’s float negative.
A health check asks whether the schedule can be trusted
GAO’s guide groups its ten best practices under four characteristics of a reliable schedule. A schedule is comprehensive when it holds all the work, with resources and durations; well constructed when its logic is simple and complete and its critical path and float are real; credible when its levels agree and a risk analysis backs its dates; and controlled when it is updated with actual progress and compared with a baseline:
| Characteristic | GAO best practices | In the fest |
|---|---|---|
| Comprehensive | 1 all activities, 3 resources, 4 durations | 14 activities with owners and durations |
| Well constructed | 2 sequencing, 6 valid critical path, 7 reasonable float | the network check and the passes pass |
| Credible | 5 traceable horizontally and vertically, 8 risk analysis | the risk analysis comes in this module’s last lesson |
| Controlled | 9 updates with actual progress, 10 a baseline | the day 20 update against the baseline |
A health check walks the table with the schedule open: count activities without links, lags and constraints, look for float that is too large to be real, confirm the critical path is continuous, and compare the latest update with the baseline. The fest passes three rows today and the fourth once its risk analysis is done.
Key idea
Dates come from the network and the calendar, progress is judged against a saved baseline, and a Gantt chart is only as trustworthy as the links behind its bars.
Checkpoint
Check: Reading a Gantt chart · GAO's four characteristics
Practise: calendars, baselines and charts
The questions use the fest’s two calendars and its day 20 update, and a few other schedules: one that has not been updated for weeks, one with no risk analysis and one whose sponsor drags a bar. Work each date out before you answer:
Practice that adapts to you
Practise this lesson
10 questions about 4 ideas of this lesson. Each answer is explained at once, and what you get right is kept in this browser.
Interview questions
Warm-up (fresher to 2–5 years): what is a schedule baseline, and why keep it once the plan has changed?
A baseline is a saved copy of the agreed schedule, kept as it was when the work began. The current schedule changes at every update; the baseline does not, so comparing the two shows each activity’s variance: the fest’s day 20 update showed the finish 3 working days later than the baseline. Without the baseline, a slip would simply become the new plan and nobody could say how far the project had drifted or which slips moved the finish. A baseline is changed only for new or removed scope or a formal replan, and rarely.
Two harder questions follow, about a team that updates the baseline every week and about a Gantt chart that looks on time while the project is not. Decide what you would check first, then open each first step:
Model answers open with any pass: ₹79 for 1 week ($2.99), one payment that never renews.
-
Fresher to mid
A vendor's Gantt chart for your office fit-out shows every bar finishing a week before the move-in date, and the vendor says the project is on time. What would you ask to see before you believe it?
Flashcards · 4 cards
Recall it, then check
Say the answer to yourself before you look: recalling it is what makes it stick.
-
What is a Gantt chart, and what does it hide?
A view of the schedule: each activity drawn as a bar on a calendar, from the dates the network and calendar give. It shows slips and crowded weeks but hides the logic, so read it with the links or a network check and never fix a date by dragging a bar.
-
What is a schedule baseline, and what is statusing?
A baseline is a saved copy of the agreed schedule, kept unchanged for comparison (GAO's 10th best practice). Statusing is the update at each status date with actual starts and finishes and remaining durations, then recalculating through the links. Re-baseline only for new/removed scope or a formal replan.
-
What are GAO's four characteristics of a reliable schedule?
Comprehensive (all work, with resources and durations), well constructed (simple complete logic; real critical path and float), credible (horizontally and vertically traceable; backed by a risk analysis) and controlled (updated with actual progress and compared with a baseline). Ten best practices group under these four.
-
Why does the project calendar matter so much on an Indian team?
The Central Government, states and the RBI all publish different holiday lists, and India Standard Time has no daylight saving (IANA Asia/Kolkata since 1945). Teams spread across states need one calendar per place or a project calendar everyone agrees to; partners abroad move clocks twice a year.
Key takeaways
- A Gantt chart is a calendar view of the network: the working days come from the passes and the dates from a calendar, so two calendars give the same bars and different dates.
- A baseline is the saved, agreed schedule; each update records actual dates and remaining work at a status date and measures the forecast against the baseline.
- A Gantt chart shows slips and crowded weeks but hides the logic, so read it with its links or a network check, and never fix a date by dragging a bar.
- GAO’s four characteristics, comprehensive, well constructed, credible and controlled, group its ten best practices into a health check of any schedule.
Terms in this lesson
- Gantt chart
- A view of a schedule that draws each activity as a bar on a calendar, from its start date to its finish date; the dates come from the network, not from the chart.
- project calendar
- The rule that says which days a schedule may use for work: the working week and the holidays. A person or a resource may have a calendar of its own.
- schedule baseline
- A saved copy of the agreed schedule, kept unchanged so that each update can be compared with it; it changes only for new or removed scope or a formal replan.
- status date
- The date up to which a schedule update records actual starts, finishes and remaining work; forecasts are calculated from it.
References
- Schedule Assessment Guide: Best Practices for Project Schedules (GAO-16-89G) (U.S. Government Accountability Office)
- Holidays to be observed in Central Government offices during the year 2026 (O.M. No. 12/2/2023-JCA) (Department of Personnel and Training, Government of India)
- Holiday matrix: holidays under the Negotiable Instruments Act, by regional office (Reserve Bank of India)
- Time zone database (tzdb), file asia: Asia/Kolkata (Internet Assigned Numbers Authority)
Related tools
Report a problem with this lesson
Kept only in this browser. Your Learn progress