There is a national time station here in the US in Colorado, WWVB. It sends out time signals 24/7 for the purposes of national time synchronization with the Atomic Clock that is operated by NIST.

I went down a rabbit hole to see how this works. I have a Casio M5610U-1, which is a modern take on the original Casio DW-5000C. Aesthetically, it looks very much like the OG with a few new key features: solar power, LED frontlight and Multiband 6. The watch faithfully synchronizes every night, between midnight and 0500, and does so pretty consistently.

WWVB was first put on the air on July 4-5, 1963. It’s located in Fort Collins, CO and broadcasts on a frequency of 60Hz. The digital time code that allows clocks and watches to actually decode and set themselves was added July 1, 1965. It broadcasts around 50 to 70 kW and, with such tremendous power and low frequency, covers most of CONUS and doesn’t require line-of-sight.

The station sends a pulse-width modulated binary time code once per minute. Every minute is sent as 60 pulses, one per second, indicated by a brief reduction in power on the carrier signal. Each second is either:

PulseMeaning
0.2s lowBinary 0
0.5s lowBinary 1
0.8s lowDelimiter

These pulses encode

  • Year
  • Month
  • Day
  • Day of week
  • Hour
  • Minute
  • Leap seconds
  • Daylight saving time flags

So, what ever time piece you synchronize with WWVB collects a full minute of pulses and decodes them into a timestamp. The time broadcast is accurate to about ±0.1 microseconds. The data is sent in Binary-Coded Decimal

An example. Let’s say the atomic clock time is:

2026-01-10 21:37:00 (Saturday)

Minute = 37

BCD:

  • Tens = 3 → 0011
  • Ones = 7 → 0111

WWVB bit positions:

Minutes:
Bit 1 = 1
Bit 2 = 2
Bit 3 = 4
Bit 4 = 8
Bit 5 = 10
Bit 6 = 20
Bit 7 = 40

37 = 20 + 10 + 4 + 2 + 1

So bits:

40 20 10 8 4 2 1
0 1 1 0 1 1 1

Hour = 21

21 = 20 + 1

Hours bits:

20 10 8 4 2 1
1 0 0 0 0 1

Day of year

Jan 10, 2026 → Day 10 of year

Day = 010
100s = 0
10s = 1
1s = 0

Year = 26

20 + 6 → BCD

Day of week

Saturday = 6
(WWVB: 1=Mon … 7=Sun)

Here’s a simple view of the digital frame broadcast by WWVB:
sec 0 = M
sec 1–8 = minutes
sec 9 = M
sec 10–18 = hours
sec 19 = M
sec 20–28 = day of year
sec 29 = M
sec 30–38 = year
sec 39 = M
sec 40–44 = day of week
sec 45 = M
sec 46–58 = DST, leap, parity, etc
sec 59 = M

So, the encoded form of our example:

Minute = 37 → 0110111
Hour = 21 → 100001
Day = 10 → 000001010
Year = 26 → 00100110
Day of week = 6 → 110

This is what the pulse stream would look like over that minute:

SecondBinaryPulse Drop LengthTimestamp Section
0M800ms
11500msMinute
21500msMinute
31500msMinute
40200msMinute
51500msMinute
61500msMinute
70200msMinute
80200msMinute
9M800ms
101500msHour
110200msHour
120200msHour
130200msHour
140200msHour
151500msHour
160200msHour
170200msHour
180200msHour
19M800ms
200200msDay
210200msDay
220200msDay
230200msDay
240200msDay
251500msDay
260200msDay
271500msDay
280200msDay
29M800ms
300200msYear
310200msYear
321500msYear
330200msYear
340200msYear
351500msYear
361500msYear
370200msYear
380200msYear
39M800ms
400200msDay of week
411500msDay of week
421500msDay of week
430200msDay of week
440200msDay of week
45M800ms
460200msUT1 Sign
471500msUT1 Correction
480200msUT1 Correction
49M800ms
500200msLeap Second Warning
511500msDST in effect
521500msDST change imminent
530200msLeap year
540200msParity bit
551500msParity bit
561500msParity bit
570200msParity bit
581500msParity bit
59M800ms

WWVB doesn’t transmit seconds in this frame, as you can see. It transmits the minute boundary, and the seconds are inferred from the pulse timing. The start of each second is extremely accurate, phase-locked to the atomic clock by the falling edge of each pulse.

A fascinating look into how my Casio synchronizes each night, or any clock that can read these pulses–all from an era before we had even landed a person on the moon and long before the modern Internet.