Professional English for Developers Module 4 – Vocabulary for tech work
Numbers, dates and time zones: say and write them
Write dates and times nobody can misread, give a time zone with its UTC offset through daylight saving, and say versions, IDs and big numbers aloud.
What you will learn
- Write dates and times that cannot be misread, with the time zone when it matters
- Convert lakh and crore to million and billion and say large numbers aloud
- Read version numbers, percentages, units and identifiers aloud clearly
- Plan meetings across IST, US and European time zones through daylight-saving changes
Before you start
What you’ll learn · Before you start
What you will learn
- Write dates and times that cannot be misread, with the time zone when it matters
- Convert lakh and crore to million and billion and say large numbers aloud
- Read version numbers, percentages, units and identifiers aloud clearly
- Plan meetings across IST, US and European time zones through daylight-saving changes
Before you start
On this page
A release date written 04/03/26 is the fourth of March to a reader in India and the third of April to one in the US:
Node.js 24.21.0 formats one instant as 04/03/26 with its Indian English locale data and as 3/4/26 with its US English
data. Dates, times and numbers that look exact in one office can name a different moment, or a different amount, in
another.
This lesson shows how to write dates nobody can misread and how to give a time with its zone when “IST” alone has two meanings. The parts that follow plan one stand-up through the US and UK clock changes, convert the Indian numbering system for readers abroad, and say versions, IDs and percentages aloud.
Write the month as a word, or the date in ISO 8601 order
Google’s style guide warns that dates written in numbers only “can be confusing”, and gives its own example: in the
UK, 04/05/09 means May 4, 2009, and in the US it means April 5, 2009. Its advice is to write the full month name,
the day and the four-digit year, as in January 19, 2017, and for dates in numbers only to follow ISO 8601: The international standard for writing dates and times. Its date form runs from the largest unit to the smallest, year, month and day, as YYYY-MM-DD, so it reads one way everywhere.’s
year-month-day order, as in 2017-04-15. The W3C’s article on date formats gives the same two remedies: month names
with four-digit years, or ISO 8601. Microsoft’s guide adds: “Don’t use numerals to represent months.”
The program formats one instant with the locale data that ships with Node.js, the Unicode CLDR:
// One instant, formatted by the locale data that ships with Node.js (ICU and the Unicode CLDR). The short numeric forms
// disagree with each other; a month written as a word, and ISO 8601's year-month-day, read the same everywhere.
const instant = new Date(Date.UTC(2026, 2, 4, 9, 30)); // a fixed instant, so every run prints the same
console.log(`Node ${process.version}, ICU ${process.versions.icu}, CLDR ${process.versions.cldr}\n`);
const LOCALES = [
['en-IN', 'English (India)'],
['en-US', 'English (US)'],
['en-GB', 'English (UK)'],
['de-DE', 'German (Germany)'],
['ja-JP', 'Japanese (Japan)'],
];
console.log('Short date, as each locale writes it:');
for (const [tag, name] of LOCALES) {
const short = new Intl.DateTimeFormat(tag, { dateStyle: 'short', timeZone: 'UTC' }).format(instant);
console.log(` ${tag.padEnd(6)} ${name.padEnd(18)} ${short}`);
}
const monthWord = new Intl.DateTimeFormat('en-US', { dateStyle: 'long', timeZone: 'UTC' }).format(instant);
console.log(`\nMonth as a word (en-US, long): ${monthWord}`);
console.log(`ISO 8601 (toISOString): ${instant.toISOString().slice(0, 10)}`); Output
Node v24.21.0, ICU 78.3, CLDR 48.0 Short date, as each locale writes it: en-IN English (India) 04/03/26 en-US English (US) 3/4/26 en-GB English (UK) 04/03/2026 de-DE German (Germany) 04.03.26 ja-JP Japanese (Japan) 2026/03/04 Month as a word (en-US, long): March 4, 2026 ISO 8601 (toISOString): 2026-03-04
Recorded with Node.js 24.21.0 on macOS 26 arm64. To run it yourself: mise exec node@24.21.0 -- node same_instant.mjs
Five locales give five short forms, and two of them, 04/03/26 and 3/4/26, put the day and the month in opposite
places. Only the last two lines read the same everywhere: the month as a word, and the ISO date, which runs from the
largest unit to the smallest. Keep a Changelog recommends ISO dates for that reason, and ISO dates in file names and
logs sort in time order. Which of the two forms to use depends on where the date appears:
| Context | Write | Not |
|---|---|---|
| An email or a chat message | Wednesday, October 7, 2026 |
07/10/26 |
| A changelog, a log or a file name | 2026-10-07 |
7-10-2026 |
| A table read in many countries | 7 Oct 2026 or 2026-10-07 |
10/07/2026 |
Checkpoint
Check: Dates with the month as a word, or in ISO 8601 order
A time needs its zone, and IST is not one name
Google’s style guide uses the 12-hour clock with AM and PM, as in “3 PM”, and asks for the zone when it matters: spell out the region and give the UTC offset: How far a time zone is ahead of or behind Coordinated Universal Time (UTC), such as UTC+5:30 for India Standard Time, or UTC-5 for New York without daylight saving. in parentheses, as in “US and Canadian Pacific Standard Time (UTC-8)”. It adds, “Don’t abbreviate the name of the time zone.” Abbreviations are where time zones go wrong, because one abbreviation can name two zones. The program asks the CLDR data in Node.js for the short name of one moment:
// The short zone name that the Unicode CLDR data in Node.js gives one time in four English locales. "IST" names India
// Standard Time in one locale and Irish Standard Time in another, and two locales show no abbreviation for India at all.
const zoneName = (locale, timeZone, instant) =>
new Intl.DateTimeFormat(locale, { timeZone, timeZoneName: 'short', hour: '2-digit', minute: '2-digit', hourCycle: 'h23' })
.formatToParts(instant)
.find((p) => p.type === 'timeZoneName').value;
const clock = (timeZone, instant) =>
new Intl.DateTimeFormat('en-GB', { timeZone, hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }).format(instant);
console.log(`Node ${process.version}, CLDR ${process.versions.cldr}, tz ${process.versions.tz}\n`);
const july = new Date(Date.UTC(2026, 6, 15, 9, 0)); // a fixed instant in July, when Dublin is on daylight saving time
const ROWS = [
['en-IN', 'Asia/Kolkata'],
['en-US', 'Asia/Kolkata'],
['en-GB', 'Asia/Kolkata'],
['en-IE', 'Europe/Dublin'],
];
console.log('locale zone local time short name');
for (const [locale, tz] of ROWS) {
console.log(`${locale.padEnd(7)} ${tz.padEnd(15)} ${clock(tz, july).padEnd(11)} ${zoneName(locale, tz, july)}`);
}
console.log('\nThe same 09:00 UTC as a message would put it, with the zone spelled out:');
console.log(` ${clock('Asia/Kolkata', july)} India Standard Time (UTC+5:30), ${clock('Europe/Dublin', july)} in Dublin (UTC+1)`); Output
Node v24.21.0, CLDR 48.0, tz 2026c locale zone local time short name en-IN Asia/Kolkata 14:30 IST en-US Asia/Kolkata 14:30 GMT+5:30 en-GB Asia/Kolkata 14:30 GMT+5:30 en-IE Europe/Dublin 10:00 IST The same 09:00 UTC as a message would put it, with the zone spelled out: 14:30 India Standard Time (UTC+5:30), 10:00 in Dublin (UTC+1)
Recorded with Node.js 24.21.0 on macOS 26 arm64. To run it yourself: mise exec node@24.21.0 -- node zone_names.mjs
The Indian English data names India’s zone “IST”, the Irish English data names Dublin’s daylight saving time “IST” as well, and the US and UK English data show India as “GMT+5:30”. In documentation, spell the zone out as Google asks: “India Standard Time (UTC+5:30)”. In chat, the abbreviation with its offset, “IST (UTC+5:30)”, is enough, because the offset leaves one reading; naming a city works too. The same goes for EOD: write “by 6 PM India Standard Time (UTC+5:30) on Wednesday”. Step through one invite posted from Pune to a channel shared with London and New York:
The drawing shows the whole scene; its 6 steps are listed below.
Every step as text
- Call at 10 tomorrow. Rahul posts "Call at 10 tomorrow, then an EOD sync" to a channel shared with London and New York. He means 10:00 in Pune, India Standard Time.
- London reads its own 10. Emma reads 10 as 10:00 London time. In the first week of March that is 15:30 in Pune, five and a half hours after the call Rahul meant.
- New York reads another. Dan reads 10:00 New York time, which is 20:30 in Pune. One message has produced three different calls.
- Whose end of day?. "EOD sync" adds a fourth puzzle. The end of the day in Pune, 18:00, is 12:30 in London and 07:30 in New York, and each reader assumes their own.
- The zone, spelled out. Rahul rewrites: "Call at 10:00 India Standard Time (UTC+5:30) on Tuesday: 04:30 in London and 23:30 on Monday in New York." Every reader can now find the moment.
- One moment for all three. Emma and Dan plan for the same moment on their own clocks, and the sync gets a time as well: "Sync at 18:00 India Standard Time (UTC+5:30)."
Three more skills have parts of their own below. daylight saving time: Moving the clocks forward one hour for part of the year, as the US and the UK do, on different Sundays. India does not use it, so its offset from UTC never changes. moves the clocks of the US and the UK on different Sundays and India’s never, so a meeting fixed in India Standard Time moves for colleagues abroad. Large numbers change their grouping and their names between the Indian and the international system. Versions, IDs and percentages have spoken forms that keep every digit clear.
Lakh and crore, for readers abroad
The Indian system groups digits in twos after the first three: 1,23,45,678. One lakh: One hundred thousand in the Indian numbering system: 1,00,000 in the Indian grouping, 100,000 in the international one. Ten lakh is one million. is
100,000 and one crore: Ten million in the Indian numbering system: 1,00,00,000 in the Indian grouping, 10,000,000 in the international one. A hundred crore is one billion. is 10,000,000, so for a reader abroad give the international form as
well.
Checkpoint
Check: A time with its zone and its UTC offset
Daylight saving: one 10:00 IST stand-up through the US and UK clock changes Pro: opens with a Pro, Premium or Ultimate pass
India keeps one offset all year; the US and the UK move their clocks on different Sundays. This part follows one stand-up through the March changes with times computed from the tz data, then gives the rule for planning meetings in the weeks when clocks change.
In this part:
- Three Mondays of March, measured
- Planning across the weeks when clocks change
1 diagram · 1 runnable example (JavaScript) · about 4 minutes
Opening this part with your pass…
This part opens with any MySmartCoPilot pass.
- Pro pass · 1 week₹79$2.99
- 30 days₹179$5.99
- 1 year₹1,699$45
One payment; a pass never renews. The price shown is the total you pay: no fees or charges are added at checkout.
Passes can’t be bought right now, so this part can’t be opened at the moment. The free part above stands on its own. If you have a pass, enter your licence key.
It also opens every other in-depth part in Learn and every Pro tool. Sales are final, except where the law gives you a right to withdraw, for example in the EU and the UK (refund policy).
Lakh and crore for readers abroad, converted and said aloud Pro: opens with a Pro, Premium or Ultimate pass
Indian reports and contracts count in lakh and crore; readers in other countries count in thousands, millions and billions. This part shows both systems on the same numbers, with a program that writes the words, and gives the conversions to keep.
In this part:
- Two groupings of the same digits
- The words in both systems, worked out
- Converting a figure from an Indian report, step by step
2 runnable examples (JavaScript) · about 3 minutes
Opening this part with your pass…
This part opens with any MySmartCoPilot pass.
- Pro pass · 1 week₹79$2.99
- 30 days₹179$5.99
- 1 year₹1,699$45
One payment; a pass never renews. The price shown is the total you pay: no fees or charges are added at checkout.
Passes can’t be bought right now, so this part can’t be opened at the moment. The free part above stands on its own. If you have a pass, enter your licence key.
It also opens every other in-depth part in Learn and every Pro tool. Sales are final, except where the law gives you a right to withdraw, for example in the EU and the UK (refund policy).
Versions, IDs, percentages and units, said aloud Pro: opens with a Pro, Premium or Ultimate pass
A number said aloud loses its punctuation, so the spoken form has to carry it. This part gives the conventions of this track for versions, IDs, units and percentages, with a program that produces each spoken form.
In this part:
- Versions, IDs and units, digit by digit where it matters
- Percent and percentage points
- Three rules to keep from the parts on clock changes, large numbers and spoken numbers
1 runnable example (JavaScript) · about 3 minutes
Opening this part with your pass…
This part opens with any MySmartCoPilot pass.
- Pro pass · 1 week₹79$2.99
- 30 days₹179$5.99
- 1 year₹1,699$45
One payment; a pass never renews. The price shown is the total you pay: no fees or charges are added at checkout.
Passes can’t be bought right now, so this part can’t be opened at the moment. The free part above stands on its own. If you have a pass, enter your licence key.
It also opens every other in-depth part in Learn and every Pro tool. Sales are final, except where the law gives you a right to withdraw, for example in the EU and the UK (refund policy).
Practise: three messages with dates and times nobody can misread
The exercise holds three short messages with dates and times that a reader in another office could misread. Fix them until the sample tests pass:
Exercise · Easy · JavaScript
Fix three messages with dates and times nobody can misread
messages.mjs holds three messages for a channel shared by Pune, London and New York. Each one has a date or a time that a reader in another office could misread. Rewrite them inside the quotes:
- no date in numbers only: write the month as a word, such as
Wednesday, November 4, 2026, or use ISO 8601, such as2026-11-04; - every time has its zone: UTC, or a zone with its offset, such as
India Standard Time (UTC+5:30); - no EOD or EOW: give the time and its zone instead;
- name the day, with a weekday or a date, instead of tomorrow, which can be a different day in another office;
- every fact stays: the release call, the test report and the maintenance window.
Run the sample tests after each message. When they pass, read each message as a colleague in New York would.
Starter code · messages.mjs
// Rewrite each message so that readers in Pune, London and New York take the same date and time from it.
export const messages = [
'Release call at 10 tomorrow, please join.',
'Send the test report by EOD.',
'Maintenance window: 04/11/26, 02:00-04:00.',
]; The sample tests · messages.test.mjs
import { test, assert } from 'mysmartcopilot:test';
import { messages } from './messages.mjs';
// The lesson's rules for dates and times that travel.
const NUMERIC_DATE = /\b\d{1,2}[/.-]\d{1,2}[/.-]\d{2,4}\b/;
const TIME = /\b\d{1,2}(?::\d{2})?\s?(?:AM|PM)?\b/;
const ZONE = /\b(?:UTC|GMT)\b|\(UTC[+-]\d{1,2}(?::\d{2})?\)/;
const DAY = /\b(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)\b|\b(?:January|February|March|April|May|June|July|August|September|October|November|December)\b|\b\d{4}-\d{2}-\d{2}\b/;
test('there are still three messages', () => {
assert.equal(messages.length, 3, 'keep three messages');
});
test('no date in numbers only', () => {
messages.forEach((m, i) => assert.ok(!NUMERIC_DATE.test(m), `message ${i + 1}: "${m.match(NUMERIC_DATE)?.[0]}" can be read two ways`));
});
test('every time has its zone', () => {
messages.forEach((m, i) => {
assert.ok(TIME.test(m), `message ${i + 1} has no time`);
assert.ok(ZONE.test(m), `message ${i + 1}: give the time a zone, UTC or a zone with its offset`);
});
});
test('no EOD or EOW, and no tomorrow', () => {
messages.forEach((m, i) => {
assert.ok(!/\bEO[DW]\b/.test(m), `message ${i + 1}: replace EOD or EOW with a time and its zone`);
assert.ok(!/\btomorrow\b/i.test(m), `message ${i + 1}: name the day instead of tomorrow`);
assert.ok(DAY.test(m), `message ${i + 1}: name the day, with a weekday or a date`);
});
});
test('every fact stays', () => {
const facts = [['release call', 0], ['test report', 1], ['maintenance', 2]];
for (const [fact, i] of facts) assert.ok(messages[i].toLowerCase().includes(fact.toLowerCase()), `message ${i + 1} no longer mentions "${fact}"`);
}); A hint
Start with the maintenance window. 04/11/26 is a date in April to one reader and a date in November to another: write the month as a word. Then give each time its zone, such as from 02:00 to 04:00 UTC.
Results of the sample tests
| Test | Result | Details |
|---|
What your code printed
The sample tests run on this device, in your browser (QuickJS): nothing is sent to mysmartcopilot.com. The first run downloads JavaScript (about 0.6 MB), which is kept for the next runs. A check in your browser is feedback for you, not proof that the code is right for every input.
Then answer the questions on dates and time zones. The first question comes from the idea where your answers have been least sure:
Practice that adapts to you
Practise this lesson
6 questions about 5 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 mid-level): How do you write a meeting time for colleagues in India, the UK and the US?
Give one time in the organiser’s zone, spelled out with its UTC offset, and the same moment for the other offices: “10:00 India Standard Time (UTC+5:30) on Tuesday, which is 04:30 in London and 23:30 on Monday in New York” while neither country is on daylight saving time. Avoid bare abbreviations, since “IST” also names Irish Standard Time, and avoid “EOD”, which means a different hour in each office. Write the date with the month as a word, and check the conversion again whenever US or UK clocks change, because India’s never do.
Three longer questions on numbers, dates and times wait in this module’s bank:
-
Mid to senior
Your Pune team runs a daily stand-up at 10:00 India Standard Time with two colleagues in London and one in New York. In March the New York colleague misses two stand-ups in a row. What went wrong, and what do you change?
-
Mid to senior
You present figures from an Indian report to a client team in Germany: 2.5 crore requests, up from 1.8 crore, and costs of 3,40,00,000 rupees. How do you prepare the slides, and what do you say?
-
Fresher to mid
On an incident call with London and Ohio, you read out a build ID, B-70318, a version, 4.10.2, an error rate that went from 0.5 % to 2 %, and the time the errors began. How do you say each one so that nobody mishears it?
Key takeaways
- Write dates with the month as a word, or in ISO 8601 order, never in numbers alone.
- Give a time with its zone spelled out or with its UTC offset, because abbreviations such as IST name more than one zone.
- Replace EOD with a time and a zone, and give readers in other offices their own time when it helps.
Terms in this lesson
- crore
- Ten million in the Indian numbering system: 1,00,00,000 in the Indian grouping, 10,000,000 in the international one. A hundred crore is one billion.
- daylight saving time
- Moving the clocks forward one hour for part of the year, as the US and the UK do, on different Sundays. India does not use it, so its offset from UTC never changes.
- ISO 8601
- The international standard for writing dates and times. Its date form runs from the largest unit to the smallest, year, month and day, as YYYY-MM-DD, so it reads one way everywhere.
- lakh
- One hundred thousand in the Indian numbering system: 1,00,000 in the Indian grouping, 100,000 in the international one. Ten lakh is one million.
- UTC offset
- How far a time zone is ahead of or behind Coordinated Universal Time (UTC), such as UTC+5:30 for India Standard Time, or UTC-5 for New York without daylight saving.
References
- Dates and times (Google developer documentation style guide) (Google for Developers)
- Time and place (Microsoft Writing Style Guide, global communications) (Microsoft)
- Date formats (W3C Internationalization)
- Time Zone Database (IANA)
- Daylight Saving Time (National Institute of Standards and Technology (NIST))
- When do the clocks change? (GOV.UK)
- Unicode CLDR Project (Unicode Consortium)
- Keep a Changelog 1.1.0 (Keep a Changelog)
Related tools
Report a problem with this lesson
Kept only in this browser. Your Learn progress