Skip to the content.

lon_nyc

CI

London has better weather than New York City

Everyone knows London is grey and drizzly, and NYC is vibrant and sunny. That’s the story. Here’s what the hourly weather records from 2005–2024 actually show — and why, on balance, London wins.

1. NYC is dramatically wetter and snowier

NYC receives ~55 % more rainfall by volume (~1,290 mm/yr vs ~840 mm/yr) and logs roughly twice as many rainy hours. It also gets ~13 snow days per year on average; London gets one or two. The “drizzly London” reputation is a myth: London has more overcast grey days but far less actual precipitation or hours of rainfall.

2. London’s temperature is almost perfect

London sits in a narrow, stable temperature band centred around 10–11 °C year-round. That sounds cold — but 13 °C is widely cited as the optimal temperature for casual running, and London is rarely far from it. The hourly temperature histogram is nearly Gaussian: a tight, symmetric peak. If you want an active lifestyle of running and cycling, London is ideal. You can step outside in a thin jumper virtually any day of the year and survive, which isn’t true for NYC.

NYC offers no such guarantee. Its winters are genuinely brutal — 400–1100 sub-freezing hours per year, compared to London’s 75–200. Its summers bake, with cooling degree-days 3–4× higher than London’s every single year. The temperature deviation curve (below) sits higher for NYC at every point on the scale — more discomfort in both directions, simultaneously.

Temperature distributions and deviation

3. Yes, NYC gets more sun — but that’s not entirely a good thing

NYC gets roughly 1,000 more sunshine hours per year than London (~2,535 vs ~1,546). More vitamin D, better Instagram lighting. Acknowledged.

But UV radiation ages skin and raises skin cancer risk roughly in proportion to sun exposure. The UK has one of the lowest melanoma rates in the world; the US does not. The sun you’re not getting in London is not purely a loss, although you should likely take vitamin D supplements in the winter.

4. The daylight advantage for NYC is real — but small

Ok, granted, you might say, but it is very dark in winter in London, with short days and dark commutes. This is of course true, and a consequence of their different latitudes: At 40.7°N vs London’s 51.5°N, NYC has more moderate day lengths year-round. But our analysis suggests that the practical difference in terms of the hours of your waking life you will spend in daylight over a year is very small. If you wake up between 06:00 and noon, NYC gives you at most ~12 minutes more usable daylight per day on average. That’s the entire advantage. Night owls actually get more usable evening light in London, thanks to its long summer evenings.

Sleep schedule daylight plot

The verdict

London is wetter in reputation only. In reality it is drier, milder, more stable, gentler on the skin, and within rounding error on usable daylight for anyone with a normal sleep schedule. If you can tolerate grey skies — and you can, you get used to them — London’s climate is quietly excellent. London’s grey and foggy reputation likely dates to the Industrial Revolution, when a thick blanket of coal smog covered a city roamed by chimney sweeps, but this was never its natural climate.


The rest of this README documents the observational data sources, methodology, and full results tables for the analysis above. This repository should enable you to reproduce the analysis, and perhaps extend it to other cities or time periods.


Results (2015–2024)

NYC leads on total rainfall and rainy hours every year. On rainy days, London leads in 5 of 10 years at the standard 0.254 mm threshold — consistent with its many low-intensity events — though NYC takes over as the threshold rises above ~1 mm.

Annual totals for 2015–2024 (2025 excluded as a partial year):

Year City Total (mm) Rainy hours Rainy days
2015 London (Heathrow) 820 278 136
2015 New York City (Central Park) 1047 598 114
2016 London (Heathrow) 856 273 128
2016 New York City (Central Park) 1071 556 117
2017 London (Heathrow) 846 268 132
2017 New York City (Central Park) 1158 639 130
2018 London (Heathrow) 868 270 124
2018 New York City (Central Park) 1658 896 152
2019 London (Heathrow) 945 313 143
2019 New York City (Central Park) 1384 787 151
2020 London (Heathrow) 924 314 150
2020 New York City (Central Park) 1165 704 132
2021 London (Heathrow) 998 288 136
2021 New York City (Central Park) 1527 664 138
2022 London (Heathrow) 684 342 119
2022 New York City (Central Park) 1177 662 127
2023 London (Heathrow) 737 526 128
2023 New York City (Central Park) 1521 700 128
2024 London (Heathrow) 680 477 123
2024 New York City (Central Park) 1176 695 121

A “rainy hour or rainy day” uses the standard WMO threshold of > 0.254 mm (0.01 inch) of liquid-equivalent precipitation.

NYC leads on total rainfall and rainy hours across all ten years — more total rainfall and more rainy hours every single year. On rainy days London leads slightly at the standard 0.254 mm threshold (see the threshold sensitivity plot below). London’s high day counts come from frequent low-intensity events (< 0.254 mm) that account for negligible volume.

The figure below sweeps the threshold continuously (log scale, 0.01–5 mm) to confirm that NYC’s dominance on total volume and rainy hours is real. The rainy-days panel tells a more nuanced story: London leads at every threshold below ~1 mm (its many low-intensity events accumulate into more measurable days), NYC takes over above ~1 mm where individual event intensity matters more, with a brief London resurgence around 1.5 mm before NYC pulls clear.

Rainfall threshold sensitivity

Snow vs liquid rain (2015–2024)

The AA1 precipitation field records liquid-water equivalent for all precipitation phases, so rain and snow both contribute to the depth column. Snow and frozen-precipitation events are identified separately from the ISD AW1/AW2/AW3 automated present-weather fields: any hour carrying a condition code in the range 70–79 (continuous or intermittent snow, ice pellets, diamond dust) or 83–89 (snow showers, mixed rain/snow, soft hail) is flagged as a snow hour. A snow hour must also clear the 0.254 mm measurable-precipitation threshold to be counted. A calendar day is a snow day if it contains at least one snow hour; a liquid-rain day if it contains liquid-rain hours and no snow hours at all (so mixed days are counted only in snow days).

Year City Rainy days Snow days Liquid-rain days Snow hours Liquid-rain hours
2015 London (Heathrow) 136 1 135 1 277
2015 New York City (Central Park) 114 20 94 93 505
2016 London (Heathrow) 128 4 124 4 269
2016 New York City (Central Park) 117 12 105 65 491
2017 London (Heathrow) 132 3 129 3 265
2017 New York City (Central Park) 130 15 115 76 563
2018 London (Heathrow) 124 1 123 1 269
2018 New York City (Central Park) 152 17 135 90 806
2019 London (Heathrow) 143 2 141 2 311
2019 New York City (Central Park) 151 14 137 62 725
2020 London (Heathrow) 150 1 149 1 313
2020 New York City (Central Park) 132 7 125 31 673
2021 London (Heathrow) 136 1 135 1 287
2021 New York City (Central Park) 138 15 123 75 589
2022 London (Heathrow) 119 0 119 0 342
2022 New York City (Central Park) 127 9 118 59 603
2023 London (Heathrow) 128 1 127 1 525
2023 New York City (Central Park) 128 6 122 18 682
2024 London (Heathrow) 123 0 123 0 477
2024 New York City (Central Park) 121 10 111 50 645
Mean London (Heathrow) 132 1.4 130.5 1 334
Mean New York City (Central Park) 131 12.5 118.5 62 628

Key findings:

Temperature (2015–2024)

Temperature is taken from the ISD TMP field (see Methodology). All metrics are normalised by observation count so that the two stations’ different reporting densities (London ≈ 24 obs/day on FM-12, NYC ≈ 12–18 on FM-15) do not distort the comparison.

Year City HDD (°C/obs) CDD (°C/obs) Comfort dev (°C) <0 °C hours
2015 London (Heathrow) 4.42 0.34 9.35 85
2015 New York City (Central Park) 5.43 2.44 10.15 1085
2016 London (Heathrow) 4.90 0.54 9.70 128
2016 New York City (Central Park) 5.01 2.32 9.77 638
2017 London (Heathrow) 4.59 0.52 9.42 170
2017 New York City (Central Park) 5.16 2.04 9.69 761
2018 London (Heathrow) 4.80 0.90 9.55 183
2018 New York City (Central Park) 5.63 2.24 10.30 676
2019 London (Heathrow) 4.72 0.62 9.54 82
2019 New York City (Central Park) 5.48 2.03 10.09 764
2020 London (Heathrow) 4.50 0.71 9.33 54
2020 New York City (Central Park) 4.69 2.07 9.35 401
2021 London (Heathrow) 5.02 0.47 9.89 175
2021 New York City (Central Park) 4.93 2.13 9.47 584
2022 London (Heathrow) 4.33 0.80 9.09 199
2022 New York City (Central Park) 5.29 2.18 9.98 879
2023 London (Heathrow) 4.46 0.60 9.20 181
2023 New York City (Central Park) 4.23 1.96 8.78 179
2024 London (Heathrow) 4.07 0.51 8.85 74
2024 New York City (Central Park) 4.57 2.15 9.10 484

The figure below shows the full hourly temperature distributions alongside the mean absolute deviation from any chosen reference temperature. London’s histogram is narrowly Gaussian around 10–11 °C; NYC’s is flatter and wider, and its deviation curve sits higher across the board — reflecting a more continental climate with hotter summers and colder winters.

Temperature distributions and deviation

NYC Central Park station data is available in the NOAA ISD from 2005 onwards. Prior to ~2012, the ISD labels these records as AUTO rather than FM-15; the format and hourly frequency are identical (ASOS :51 timestamps), and the data are included here after validation against GHCND totals. The figure below shows six annual metrics on a shared year axis. Each city’s annual value is plotted as a semi-transparent line with dots; the thick line is a 5-year centred rolling mean (±1 std shaded) to reveal any secular drift.

Long-term trends 2005–2024

Observations from the 20-year record:

Why the stereotype persists

London has noticeably more overcast, grey days than NYC. When a looser threshold (any non-zero AA1 depth) is applied, London scores more rainy days (154–184 vs 121–138) because its FM-12 SYNOP reports frequently log sub-trace accumulations of 0.1–0.2 mm drizzle. NYC’s METAR observations encode equivalent events as condition=2 (trace) with depth=0, which disappears under any positive threshold. The 0.254 mm threshold eliminates this reporting asymmetry.

Installation

Requires Python ≥ 3.9.

python -m venv .venv
source .venv/bin/activate
pip install -e .

Usage

python -m lon_nyc [--start YEAR] [--end YEAR] [--plot FILE] [--temp-plot FILE] [--snow-plot FILE] [--trend-plot FILE]

Or, if installed via pip install -e .:

lon-nyc [--start YEAR] [--end YEAR] [--plot FILE] [--temp-plot FILE] [--snow-plot FILE] [--trend-plot FILE]
Argument Default Description
--start 2020 First year to fetch (inclusive)
--end 2025 Last year to fetch (inclusive)
--plot FILE (none) Save a rainfall threshold-sensitivity plot to FILE (PNG)
--temp-plot FILE (none) Save a temperature histogram + deviation plot to FILE (PNG)
--snow-plot FILE (none) Save a snow vs liquid-rain 2×2 stacked-bar figure to FILE (PNG)
--trend-plot FILE (none) Save a multi-panel long-term trends figure (5-yr rolling mean) to FILE (PNG)
--no-cache (off) Disable on-disk CSV cache (re-downloads from S3)

Example

python -m lon_nyc --start 2005 --end 2024 \
    --plot plots/threshold_sensitivity.png \
    --temp-plot plots/temperature_panels.png \
    --snow-plot plots/snow_vs_rain.png \
    --trend-plot plots/long_term_trends.png

Sample output:

================================Annual Precipitation Summary================================
Years 2005–2024 | threshold: >0.254 mm

Year   City                             Total (mm)  Rainy hrs  Rainy days  Snow hrs  Snow days  Rain hrs  Rain days
--------------------------------------------------------------------------------------------------------------------
2005   London (Heathrow)                     641.2        278         137         0          0       278        137
2005   New York City (Central Park)         1422.8        706         113        74         18       632         95
...

==============================Annual Temperature Summary==============================
Years 2015–2024 | HDD base: 15.5°C  CDD base: 18.0°C  Comfort base: 21.0°C

Year   City                              HDD (°C/obs)  CDD (°C/obs)  Comfort dev  <0°C hrs
-------------------------------------------------------------------------------------------
2015   London (Heathrow)                         4.42          0.34         9.35        85
2015   New York City (Central Park)              5.43          2.44        10.15      1085
...

Methodology

Stations

City Station USAF WBAN WMO Report type
New York City (Central Park) 725053-94728 725053 94728 FM-15 (METAR)
London (Heathrow, EGLL) 037720-99999 037720 99999* 03772 FM-12 (SYNOP)

* UK stations have no WBAN code; 99999 is the standard ISD placeholder.

S3 object keys strip the hyphen from the station ID, e.g. noaa-global-hourly-pds/2023/72505394728.csv.

Precipitation field

Precipitation depth is taken from the ISD AA1 compound field:

AA1 = period_hours , depth_tenths_mm , condition_code , quality_code

The depth (second sub-field, index 1) is an integer in tenths of millimetres, converted to mm by dividing by 10. Missing observations are coded 9999 or +9999 and become NaN.

AA1 always reports liquid-water equivalent regardless of precipitation phase, so rain, snow, sleet, and freezing rain all contribute to the same depth column. Snow and frozen events appear as positive depths in AA1 at the same liquid-equivalent rate — there is no snow/rain asymmetry between the two cities in the depth field.

Snow / frozen-precipitation detection

Precipitation phase is determined from the ISD automated present-weather fields AW1, AW2, and AW3. Each field encodes a single weather phenomenon as condition_code,quality_code. An observation hour is flagged as frozen precipitation when any of the available AWn columns carries a code from the following ranges (ISD Section 7.1):

Code range Phenomenon
70–75 Continuous or intermittent snow (light → heavy)
76–79 Diamond dust, snow grains, ice crystals, ice pellets (sleet)
83–84 Moderate/heavy shower of mixed rain and snow
85–86 Light or moderate/heavy snow showers
87–89 Soft hail, ice pellet showers, small hail

A row is a snow hour only when it also clears the 0.254 mm measurable- precipitation threshold. A day is a snow day if it contains at least one snow hour; a liquid-rain day if it has liquid-rain hours and no snow hours at all (mixed days are classified as snow days only).

Code Name Kept? Reason
FM-15 METAR (hourly) Primary NYC observation type (2012–present); also present at Heathrow but used only as a fallback (see note below)
AUTO ASOS automated obs (hourly) NYC label prior to ~2012; identical format and frequency to FM-15
FM-12 SYNOP (hourly) Primary London/Heathrow observation type
FM-16 SPECI (special METAR) Sub-hourly; variable AA1 period causes double-counting
SOD/SOM Daily/monthly summaries Not hourly

Heathrow FM-12 vs FM-15 for temperature. Heathrow files both FM-12 (SYNOP) and FM-15 (METAR) reports, but the ISD stores temperature in the FM-15 rows at whole-degree Celsius resolution only (e.g. +0100 = 10 °C exactly), whereas FM-12 rows carry genuine 0.1 °C resolution. Using FM-15 rows would produce large artificial spikes at every integer °C in the temperature histogram. The processor therefore uses FM-12 rows exclusively for temperature whenever a station files any FM-12 reports, falling back to FM-15 / AUTO only for stations (like NYC) that have no FM-12 data at all. FM-15 and AUTO are treated as equivalent for this purpose — the presence of a few supplemental FM-15 rows in otherwise-AUTO years does not cause the AUTO rows to be dropped. This is done automatically — no station-specific configuration is needed. For precipitation, FM-12 rows are used for Heathrow because the AA1 accumulation field is only populated there on FM-12 rows; NYC’s AA1 data is on FM-15 / AUTO rows. Both types are parsed and the results combined.

Rainy-hour threshold

An hour is counted as rainy when precipitation_mm > 0.254 mm (equivalent to the US NWS / WMO definition of 0.01 inch of measurable precipitation).

Using > 0 mm instead inflates London’s counts because Heathrow’s FM-12 SYNOP reports frequently log sub-trace accumulations (0.1–0.2 mm drizzle) that NYC’s FM-15 METARs encode as condition=2 / depth=0 (trace). The 0.254 mm threshold eliminates this reporting asymmetry and aligns both cities with published climate-table conventions.

Rainy-day definition

A calendar day is rainy if it contains at least one rainy hour (i.e. at least one hour with liquid-equivalent depth > 0.254 mm). Rainy days decompose into snow days (at least one snow hour that day) and liquid-rain days (one or more liquid-rain hours, no snow hours); the two categories are mutually exclusive so they sum to the total rainy-day count.

Temperature discomfort

Hourly air temperature is taken from the ISD TMP mandatory field:

TMP = +TTTT , Q

TTTT is temperature in tenths of °C (signed integer); Q is a quality flag. Two categories of observation are excluded as NaN:

As noted in the report-type section above, Heathrow FM-12 rows are used exclusively for temperature (0.1 °C resolution); FM-15 rows are dropped for this station to avoid whole-degree histogram spikes.

Three metrics are computed, each using its own conventional baseline, and all normalised by observation count to make the two stations comparable:

Metric Formula Baseline Standard
HDD mean(max(15.5 − T, 0)) 15.5 °C WMO / UK Met Office heating degree-day base
CDD mean(max(T − 18, 0)) 18.0 °C Standard cooling degree-day base
Comfort dev mean(|T − 21|) 21.0 °C Two-sided deviation from a comfortable temperature
< 0 °C hours count(T < 0) 0 °C Raw count of freezing hours per year

Using separate baselines for HDD and CDD (rather than one combined baseline) ensures each metric measures what it is conventionally understood to measure.

Validation against GHCND (NYC)

Annual totals from the ISD AA1 field were cross-checked against GHCND daily totals for Central Park (station USW00094728). Agreement is within ~1% across all years.

Year GHCND official Our ISD calc Difference
2020 1151.9 mm (45.35 in) 1166.0 mm +1.2%
2021 1517.1 mm (59.73 in) 1527.3 mm +0.7%
2022 1176.0 mm (46.30 in) 1185.7 mm +0.8%
2023 1506.0 mm (59.29 in) 1523.3 mm +1.2%
2024 1177.8 mm (46.37 in) 1178.0 mm +0.0%

The small systematic ~+1% occurs because GHCND records trace (T) precipitation as exactly zero, whereas the ISD AA1 field sometimes encodes a small positive depth for the same events.

Running the tests

pip install -e ".[dev]"
pytest

Planned: sunshine hours comparison

The natural follow-up question is whether London has more sunshine than NYC — the other half of the “miserable London weather” stereotype.

London

Real observed hourly sunshine data (Campbell-Stokes recorder) is available from the Met Office MIDAS Open dataset via CEDA:

NYC

No equivalent observed sunshine record exists in any public US network. The following sources were investigated:

Source Outcome
GHCND TSUN — Central Park, JFK, LaGuardia 0 / 365 days populated in 2020–2024
NOAA LCD HourlySkyConditions Cloud-layer codes only; no duration
ISD GF1 sky-cover oktas Invalid proxy — counts night-time clear sky
ISD REM 55SSS SYNOP groups — Central Park / JFK / LaGuardia Sparse and unreliable
ISD REM 55SSS SYNOP groups — Newark EWR (725020-14734) Investigated in detail below; not usable
NOAA SURFRAD / SolRad-Net pyranometer networks Nearest station is Penn State, PA (≈ 250 km); no NYC-area site
NOAA US Climate Reference Network (USCRN) No station within NYC or close suburbs
NASA AERONET — CCNY (40.82°N, 73.95°W) and GISS (40.80°N, 73.96°W) Cimel direct-sun photometers only observe when the sun is unobscured, so obs presence ≠ cloud-free sky; additionally Level 1.5 data are cloud-screened (cloudy obs removed), gaps cannot be distinguished from instrument downtime (e.g. a 6-day outage Jun 18–24 2023), and the SZA cutoff (≈ 78°) causes systematic undercounting of ~2–3 h/day near sunrise/sunset
NOAA 1961–1990 climate normals (TSUN) — Central Park Monthly normals exist (≈ 2 535 hrs/yr) but the underlying sunshine recorder was discontinued; no equivalent hourly series for 2020–2024
Open-Meteo ERA5 reanalysis Modelled, not observed; inflates ≈ 60 % vs Met Office actuals

Newark EWR investigation

Newark Liberty International Airport (725020-14734) is the closest major weather station to NYC that files SYNOP (FM-12) reports in the ISD, and was investigated as a possible sunshine-recorder proxy. The ISD REM field was parsed for WMO SYNOP 55SSS groups (sunshine duration in tenths of hours since the last observation) across 2020–2024, excluding sentinel values ≥ 300.

Year Newark SYN rows Real 55SSS obs Implied sunshine hrs Avg hr/day
2020 1 450 96 51 0.1
2021 1 436 89 39 0.1
2022 1 449 101 44 0.1
2023 1 655 102 46 0.1
2024 2 775 219 101 0.3

For comparison, Heathrow logs 634–941 real 55SSS observations per year and implies 1 250–1 680 sunshine hours annually (≈ 3.4–4.6 hr/day) — physically plausible for a Campbell-Stokes recorder. Newark’s implied totals of 39–101 hours per year (≈ 0.1 hr/day) are physically impossible and confirm that Newark does not operate a sunshine-duration recorder. The sparse 55SSS groups that do appear are opportunistic entries in manually augmented SYNOP messages, not systematic instrument readings.

Conclusion: No observed sunshine-duration series for NYC is available for 2020–2024 in any public network. US ASOS/AWOS stations do not deploy sunshine-duration recorders, and the radiation monitoring networks (SURFRAD, SolRad-Net, USCRN) have no NYC-area site. The AERONET instruments at CCNY and GISS are in principle a sunshine proxy (they only observe when the sun is unobscured) but are not usable in practice: the Level 1.5 cloud-screened dataset removes cloudy observations, making gaps indistinguishable from instrument downtime (a 6-day outage was confirmed in June 2023), and the solar zenith angle cutoff (≈ 78°) causes systematic undercounting of 2–3 hours of daylight near sunrise and sunset. Historical NOAA normals show ≈ 2 535 sunshine hours/yr for Central Park in the 1961–1990 period, but the underlying instrument record has not been continued. Implementation is deferred until an equivalent NYC observed-sunshine source is identified.

Wikipedia climate-normal comparison

Even though a contemporary observed series for NYC is unavailable, the Wikipedia long-term normals allow a static city-to-city comparison. The Heathrow 2015–2024 observed mean (derived from ISD 55SSS groups, see scripts/heathrow_sunshine.py) can be compared against both its own 1991–2020 Met Office normal and the NOAA 1961–1990 Central Park normal.

Month LHR obs 2015–24 (h) LHR wiki 1991–2020 (h) NYC wiki 1961–90 (h) NYC − LHR (h)
Jan 72.0 57.5 162.7 +105.2
Feb 82.5 77.8 163.1 +85.3
Mar 112.0 111.5 212.5 +100.5
Apr 158.3 157.3 225.6 +67.3
May 180.8 192.0 256.6 +75.8
Jun 187.4 196.4 257.3 +69.9
Jul 185.3 203.3 268.2 +82.9
Aug 162.9 196.8 268.2 +105.3
Sep 130.4 144.7 219.3 +88.9
Oct 99.7 100.9 211.2 +111.5
Nov 71.5 62.8 151.0 +79.5
Dec 57.4 44.6 139.0 +81.6
Annual 1 500 1 546 2 535 +989

Sources: NYC — NOAA 1961–1990 normals via Wikipedia. LHR wiki — Met Office 1991–2020 normals via Wikipedia. LHR obs — computed from NOAA ISD 55SSS groups (this project, scripts/heathrow_sunshine.py).

Key finding: NYC receives roughly +990 hours more sunshine per year than London Heathrow — about 64 % more (2 535 h vs 1 546 h). The gap is largest in autumn and winter (Oct +112 h, Jan +105 h, Aug +105 h) and smallest in late spring/early summer (Apr +67 h, Jun +70 h), when London’s long days partially compensate for its cloudier skies. The Heathrow 2015–2024 observed mean (1 500 h) is close to the 1991–2020 normal (1 546 h), giving confidence that the ISD-derived series is well-calibrated.

Note: the baseline periods differ (1961–1990 for NYC, 1991–2020 for LHR), so the comparison is indicative rather than strictly contemporaneous.

Daylight seasonality: latitude effect on usable daylight

Motivation

London sits at 51.5°N and New York City at 40.7°N — a difference of nearly 11 degrees of latitude. That gap drives a dramatic difference in day length seasonality. London’s summer days are very long (≈ 16.4 h near the June solstice) while its winter days are very short (≈ 7.6 h near the December solstice). NYC is more moderate in both directions (≈ 14.9 h in June, ≈ 9.1 h in December).

The key question is: how much of that daylight is actually usable, given that early-morning light before you wake up and late-evening light after bedtime is largely wasted?

Method

The analysis uses the standard WMO sunrise equation (see scripts/daylight_latitude.py):

δ = −23.45° × cos(360/365 × (doy + 10))
cos(ω₀) = −tan(φ) × tan(δ)
day_length = 2ω₀ / 15   (hours)

where doy is day-of-year and φ is latitude. Sunrise and sunset are expressed in local solar time, which is a good proxy for clock time at these longitudes (London ≈ 0°W, NYC ≈ 74°W with UTC−5 standard time). Daylight Saving Time is not applied; DST shifts both cities’ clocks equally.

Usable daylight is the overlap of [sunrise, sunset] with the waking window, averaged over all 365 days of the year.

Effect of sleep schedule

Rather than fix a single waking window, scripts/sleep_schedule_daylight.py sweeps the wake-up time across the full 24-hour clock in 15-minute steps, assuming a fixed 8-hour sleep window (so 16 waking hours). For each wake-up time, usable daylight is the overlap of the 16-hour waking window with [sunrise, sunset], averaged over all 365 days.

London (red) vs NYC (blue) — annual-mean usable daylight by wake-up time:

Sleep schedule daylight plot

Key findings

  1. For typical sleep schedules (wake 06:00–12:00), the difference is negligible. NYC leads by at most ~0.2 h/day — barely 12 minutes. Waking anywhere between 08:00 and noon gives almost identical usable daylight in both cities.

  2. Early risers get slightly more in NYC. London’s extreme winter shortfall (December days of only 7.7 h) is not compensated by its long summer mornings, which mostly fall before any reasonable wake time. NYC’s more moderate year-round day length gives it a small consistent edge for normal schedules.

  3. Night owls get more daylight in London. For wake times of roughly 12:00–20:00 (sleeping through the morning), London’s very long summer evenings pay off. The London advantage peaks at +0.22 h/day when waking at 14:00 — the only scenario where London’s latitude is genuinely beneficial for usable daylight.

  4. London’s daylight is 1.5× more seasonal. The standard deviation of daily day length is 3.0 h/day in London vs 2.0 h/day in NYC. London’s extreme seasonality amplifies both directions, but the waking-window clips only the top (early-morning summer hours), not the bottom (short winter days) — producing a net annual deficit for most schedules.

Scripts: scripts/daylight_latitude.py and scripts/sleep_schedule_daylight.py (no external data required — purely astronomical).

Air quality comparison (2015–2024)

Motivation

Both London and NYC have improved dramatically since the mid-20th century (London’s coal-smog era, NYC’s pre-Clean-Air-Act industrial pollution), but the two cities still face very different acute air quality threats. NYC sits downwind of the boreal forests of Canada and experiences periodic wildfire smoke events — most dramatically in June 2023 when Canadian wildfires drove NYC PM2.5 to ~40 µg/m³ on a monthly average, and briefly to hazardous levels on individual days. London, further east with the Atlantic upwind, was completely unaffected.

Air quality timeseries 2015–2024

Monthly mean PM2.5 (top) and NO2 (bottom), 2015–2024. Thin lines show raw monthly values; thick lines show a 3-month rolling mean. WHO annual guidelines are shown as dashed (2005 standard) and dotted (2021 revised standard) horizontal lines.

Why not compare AQI to DAQI?

AQI and DAQI are not directly comparable — they have completely different breakpoints and scales (AQI 0–500; DAQI 1–10), each calibrated against their own national standards (US NAAQS vs UK AQS). The correct shared unit is concentration in µg/m³, which both networks measure physically. NO2 from the US EPA network is reported in ppb and converted here using the standard factor of 1.88 µg/m³ per ppb (at 20 °C / 1 atm).

Monitor selection

Getting a genuinely comparable pair of sites took more work than expected. The two core requirements were: (a) the same LAQN/EPA site classification (“Urban Background” on both sides — not roadside, kerbside or industrial), and (b) a continuous instrument giving a reading every single day across the full 2015–2024 window.

NYC — what was considered and why each was rejected or kept

PM2.5 instrument type — FRM vs continuous

All sites in the standard EPA daily_88101 (FRM) archive use filter-based gravimetric samplers. A filter cassette is exposed for exactly 24 hours, then sent to a laboratory for weighing — but only every 1–6 days depending on the monitoring schedule. IS 45 (the initial candidate) operates on a roughly every-other-day schedule, yielding ~14–18 valid observations per month. Monthly means computed from those samples are statistically valid, but the timeseries looks visibly gappy when plotted.

The EPA publishes a separate archive, daily_88502, for continuous PM2.5 instruments (TEOM and BAM analysers that report every hour and roll up to a 24-hour block average). These give one row per day, every day.

NYC PM2.5 sites surveyed (continuous, EPA 88502, 2015–2024):

Site Borough Days/yr (typical) Notes
CCNY Manhattan (Washington Heights) 363–366 Chosen. Longest continuous PM2.5 record in Manhattan. Urban background character — college campus on a hilltop, away from any major road. Full 10-year record.
MORRISANIA Bronx 360–365 Urban background, full record, but Bronx not Manhattan.
IS 74 Staten Island 355–365 Urban background, but geographically isolated from the other boroughs.
FRESHKILLS WEST Staten Island 345–360 Adjacent to a landfill — not representative urban background.
MASPETH LIBRARY Queens 358–365 Queens community library — urban background, good record.
PS 314 / PS 274 Brooklyn 130–215 Incomplete records, Brooklyn schools.
Intermediate School 143 Bronx 299–310 Good record but Bronx, and IS 52 already covers the Bronx for NO2.

CCNY (City College of New York, 160 Convent Ave, 40.819°N 73.948°W) was chosen: it is the only continuous PM2.5 site in Manhattan, sits on a hilltop campus in Washington Heights well away from major arterials, and has run without gaps since at least 2015.

NYC NO2 sites surveyed (EPA 42602, continuous, 2015–2024):

No Manhattan NO2 monitor exists anywhere in the EPA network. The available sites with a full 10-year continuous record are all in the Bronx or Queens:

Site Borough Lat Lon Distance from CCNY Mean NO2 2023 (µg/m³) Notes
IS 52 Bronx 40.816 −73.902 3.5 km 29 Chosen. Closest site to CCNY, same urban-background residential character.
PFIZER LAB SITE Bronx 40.868 −73.878 9 km 26 Historically co-located with an industrial facility — less representative.
QUEENS COLLEGE 2 Queens 40.736 −73.822 11 km 26 College campus, good record, but 11 km from CCNY and in a different borough.
Queens College Near Road Queens 40.736 −73.822 11 km Explicitly designated “Near Road” — roadside, not urban background. Excluded.

IS 52 (South Bronx, 40.816°N 73.902°W) is a school-based monitor 3.5 km from CCNY across the Harlem River — essentially the same neighbourhood. Its 2023 mean NO2 of 29 µg/m³ is consistent with other urban-background Bronx and Queens sites, and it has no gaps in the 2015–2024 record.

London — what was considered and why each was rejected or kept

The London LAQN has 258 active and historical monitoring sites across Greater London. The ERG API exposes all of them. The initial choice, BL0 Camden–Bloomsbury, is one of the longest-running urban-background sites in the network (since 1992) but was found to have serious data problems for PM2.5:

BL0 Camden–Bloomsbury PM2.5 data availability by period:

Period Status
2015 – May 2021 ✅ Good (600–720 hourly values/month)
Jun 2021 – Apr 2022 Complete gap — instrument offline for 11 months
May 2022 – Aug 2023 ✅ Good
Sep 2023 – Dec 2024 No data

BL0 NO2 is fine throughout; the gap is specific to the PM2.5 instrument. Using BL0 would require either gap-filling or truncating the London PM2.5 series at mid-2023 — neither is satisfactory for a 10-year comparison.

London urban-background sites checked for 2015–2024 continuity:

Site Type PM2.5 2024? NO2 2024? Notes
BL0 Camden–Bloomsbury Urban Background ❌ (stopped Aug 2023) 11-month PM2.5 gap in 2021–22. Rejected for PM2.5.
KC1 N. Kensington Urban Background Chosen. Continuous PM2.5 and NO2 throughout 2015–2024. Open since 1995.
HK6 Hackney – Old Street Roadside Roadside classification — not urban background. Excluded.
LW2 Lewisham – New Cross Roadside Roadside. Closed Apr 2025. Excluded.
CT3 City of London – Aldgate Urban Background Closed Jun 2023. Excluded.
MY1 Westminster – Marylebone Rd Kerbside The busiest road in London — intentionally high-pollution reference site, not urban background. Excluded.
WA7 Wandsworth – Putney High St Kerbside Kerbside on a main road. Excluded.

KC1 (Kensington and Chelsea – North Kensington, 51.521°N 0.213°W) is LAQN “Urban Background”, open since March 1995, located in a residential street in North Kensington — a direct analogue to the CCNY and IS 52 residential / campus character. It has PM2.5 and NO2 running continuously through end of 2024, with no multi-month gaps. The Jan 2022 NO2 record has ~130 valid hours out of 720 (instrument issue for ~19 days) but this is isolated and the monthly mean is still computable from the remaining data.

Summary: why this pair is the best available match

Criterion NYC (CCNY + IS 52) London (KC1)
Site classification Urban Background (EPA) Urban Background (LAQN)
Instrument type Continuous (TEOM/BAM) Continuous (TEOM-FDMS)
PM2.5 record completeness 363–366 days/yr, no gaps Near-complete, no multi-month gaps
NO2 record completeness Near-complete daily Near-complete, one minor 19-day gap (Jan 2022)
Setting College hilltop / school, residential Residential street
Distance from city centre ~8 km NW of Midtown ~5 km W of central London

The main residual caveat is that CCNY uses a TEOM corrected with a site-specific correction factor, while KC1 uses TEOM-FDMS (a different semi-continuous correction). Both are classified as “indicative” rather than reference-method instruments. Absolute concentrations may differ by a few percent due to instrument systematics, but the inter-annual trends and event structure are robust.

Final station pairs

  PM2.5 NO2
NYC CCNY — City College of New York, 160 Convent Ave, Manhattan (40.819°N, 73.948°W). Continuous TEOM instrument (EPA param 88502), 363–366 valid days/year. IS 52 — Intermediate School 52, South Bronx (40.816°N, 73.902°W), 3.5 km from CCNY. Continuous analyser (EPA param 42602). No Manhattan NO2 monitor exists in the EPA network.
London KC1 — Kensington and Chelsea – North Kensington (51.521°N, 0.213°W). LAQN “Urban Background”, open since 1995, continuous PM2.5 and NO2 through 2024. Same KC1 site.

Data sources

NYC (EPA pre-generated daily bulk files, no authentication):

https://aqs.epa.gov/aqsweb/airdata/daily_88502_{year}.zip   # continuous PM2.5
https://aqs.epa.gov/aqsweb/airdata/daily_42602_{year}.zip   # NO2 (ppb)

London (ERG / King’s College London API, no authentication):

https://api.erg.ic.ac.uk/AirQuality/Data/Site/SiteCode=KC1/
    StartDate={YYYY-MM-DD}/EndDate={YYYY-MM-DD}/Json

Returns hourly PM2.5 (µg/m³) and NO2 (µg/m³). Data are fetched by calendar month, cached locally, and resampled to monthly means.

Key findings

Decade means (2015–2024):

  PM2.5 (µg/m³) NO2 (µg/m³)
NYC (CCNY / IS 52) ~7.7 ~27
London (KC1 N. Kensington) ~10 ~37

Counter-intuitively, London’s PM2.5 and NO2 are both higher than NYC’s on a decade average. The PM2.5 gap is driven by London running notably higher concentrations in 2015–2019 (~11–14 µg/m³) before the Ultra Low Emission Zone (ULEZ) was introduced and gradually expanded. By 2022–2024 both cities have converged to similar PM2.5 levels (~6–8 µg/m³). London’s persistently higher NO2 reflects its much larger diesel vehicle fraction and dense street canyons — a pattern that ULEZ has begun to erode but has not yet eliminated.

The wildfire contrast: NYC’s monthly PM2.5 spikes sharply in June 2023 (~40 µg/m³ at CCNY — more than 5× the WHO 2021 guideline in a single month), driven by Canadian boreal wildfire smoke. London’s KC1 shows no such signal. This asymmetry is structural: NYC lies directly downwind of an increasingly fire-prone boreal forest; London, with the Atlantic to the west, does not.

Script: scripts/air_quality.py — downloads and caches all data, generates the plot above. All data are stored in .cache/ (gitignored) so subsequent runs use only local files.