The Winter Solstice in the Northern hemisphere in 2015 is December 22 at 04:49 UTC. Where I'm located in Nova Scotia, Canada, that's December 22, 00:49 AST. And so I would say the shortest day of the year is tomorrow, the 22nd. But for my friends in Ontario, that's December 21, 23:49 EST. And so, for them, the shortest day is today, the 21st.

Does this make sense?

  • $\begingroup$ Isn't that just a one hour time difference, between ADT and EDT? In other words the same time? (Somebody check my counting.) $\endgroup$
    – Andy
    Dec 21, 2015 at 17:29
  • $\begingroup$ If you mean "on which day is there the least daylight (time between sunrise and sunset)", yes, it will vary on location. Because the sun has angular width and because of refraction, there might even be places where the shortest day is neither the 21st nor the 22nd. And, of course, the North Pole has 0 hours of sunlight on both days, as well as for months before and after. $\endgroup$
    – user21
    Dec 21, 2015 at 18:04
  • 1
    $\begingroup$ I visited aa.usno.navy.mil/data/docs/RS_OneYear.php and, for Eastport Maine, the shortest day is December 23rd. For Seattle, WA, the 21st and 23rd are equally short, but the 22nd in slightly longer. You may want to run other calculations for reference. 10000birds.com/what-is-the-shortest-day-of-the-year.htm is another person who has noticed this. $\endgroup$
    – user21
    Dec 22, 2015 at 0:03
  • 1
    $\begingroup$ Do you mean EST and AST? We're not on daylight time in the Northern Hemisphere at this time. $\endgroup$
    – user21
    Dec 28, 2015 at 2:12
  • $\begingroup$ barrycarter, yes you are correct. I've edited the question. $\endgroup$ Dec 28, 2015 at 12:33

4 Answers 4


Sure it can be (and is) true. Everyone is going through the Earth's "zone of lightness" at different times. Presumably whichever of those times is "nearest to" the actual moment of solstice will be the "shortest period between sunrise and sunset" for any given person (longitude) (ignoring natural and time-zone variations as noted in other comments). As you note, for your friends and everyone west of them up to the Date Line, that will likely be 12/21. And for you and everyone east of you around to the Date Line, that will likely be 12/22.

Maybe it helps (or maybe not) when you realize that people very close to the Date Line itself but on opposite sides experience 12/21 and 12/22, resp., as "the same day".

  • $\begingroup$ So, would there be a specific longitude on which the 21st and 22nd have equal periods of sunlight, such that everywhere Eastward, the 22nd is shortest, and Westward has the 21st as the shortest? If so, how would one go about determining that longitude? $\endgroup$ Dec 21, 2015 at 20:39
  • $\begingroup$ Presumably (again ignoring natural variations), those for whom the moment of solstice is "at midnight" would experience "equal period of sunlight" days on either side of that midnight. (I should qualify that we're talking "sun time" here, not time-zone time.) $\endgroup$
    – Jeff Y
    Dec 21, 2015 at 20:42
  • $\begingroup$ I.e. given that the sun "travels" at 15 degrees of longitude per hour, and that the solstice occurs at 04:49 UTC, the "equal day" longitude can be calculated as 72 degrees 15 minutes West. $\endgroup$
    – Jeff Y
    Dec 21, 2015 at 20:53

@DavidHammen is correct in noticing that http://aa.usno.navy.mil/data/docs/RS_OneYear.php rounds to the nearest minute (and it turns out they do this inconsistently), so I wrote https://github.com/barrycarter/bcapps/blob/master/ASTRO/bc-solve-astro-12940.c to solve this.

However, it was pretty much a waste of time, since it just verifies @JeffY's comment that the 21st and 22nd are equally long at longitude 72 degrees and 15 minutes west.

The equal day lines actually runs northwest/southeast, starting at about 22N, 71.25W and ending at 67N, 73.05W, looking something like this on an equiangular map (longitude scale greatly exaggerated):

enter image description here

West of this line, the 21st is the shortest day; east of this line, the 22nd is the shortest.

South of 22N, we cross the Tropic of Cancer, and neither day would be the shortest. North of 67N, we enter the land of 24-hour sunlessness, where there are multiple days with zero sunlight.

ADDENDUM: Per @JeffY's observation, the shortest/longest day will occur on the same day worldwide (roughly speaking) when the solstice occurs at noon GMT. Here are the times this century when the solstice occurs within 1 hour of noon GMT:

2004-12-21 12:41:32 
2006-06-21 12:25:54 
2008-12-21 12:03:48 
2010-06-21 11:28:21 
2012-12-21 11:11:34 
2035-06-21 12:33:08 
2039-06-21 11:57:22 
2041-12-21 12:18:22 
2045-12-21 11:35:09 
2064-06-20 12:46:15 
2068-06-20 11:54:24 
2072-06-20 11:14:32 
2074-12-21 12:36:04 
2078-12-21 11:58:57 
2082-12-21 11:05:49 
2097-06-20 12:15:11 
  • $\begingroup$ I'm not so sure aa.usno.navy.mil is inconsistent in their rounding. They're inconsistent with your results. They are specific about what constitutes sunrise and sunset, which is when the center of the Sun is 50 arcminutes below the horizon (that's the standard definition of sunrise and sunset). If you're using something that calculates rise and set for any body, I suspect that it's when the center of the body is at the horizon. It's unspecified what ephemeris model or Earth rotation model they're using, but I doubt it's the same one you used. $\endgroup$ Jan 4, 2016 at 5:30
  • $\begingroup$ I actually had an extensive email discussion with JPL/NASA to get my results to match HORIZONS. I had the 50 arcminutes part right, but had to change my rotation model to the super-accurate ITRF93, and had to adjust for the fact the Earth is an ellipsoid, meaning the surface normals are not opposite to the direction of gravity. I'm saying aa.usno.navy.mil rounds down, even when they should be rounding up, and that they are inconsistent with HORIZONS, not just with me (but also with me, since my results match HORIZONS). More later. $\endgroup$
    – user21
    Jan 4, 2016 at 5:43
  • $\begingroup$ ITRF93 is not so "super-accurate" anymore. The 93 stands for 1993, a 20+ year old model. The IERS released yearly updates from 1992 to 1997. Since then, the release rate has slowed down. There were a lot of changes in 2000, when the new Earth rotation model was introduced, a few more for the 2006 update to the nutation model. The most recent release is ITRF08. Since the USNO is a key partner of the IERS and a key contributor to the SOFA, I suspect they're using ITRF08. $\endgroup$ Jan 4, 2016 at 6:45
  • $\begingroup$ Then again, since the data are rounded to the minute, they might be using a perl script that was last modified in the millennium. $\endgroup$ Jan 4, 2016 at 6:46
  • $\begingroup$ Are you correcting for solar annual aberration? For the various different time scales used by different organizations? JPL uses $T_\text{eph}$, a time scale of their own making, but now pretty much in line with TDB. The USNO, the Astronomical Almanac, IERS, and SOFA use TT, which is slightly different from TDB. TT, TDB, and JPL's ephemeris time differ markedly from UTC, over a minute and counting. $\endgroup$ Jan 4, 2016 at 6:52

Here's a simple python3 script that calculates when the shortest day of the year occurs at various longitudes. If you don't already have PyEphem, it's a cinch to install it: pip3 install PyEphem (or just pip install PyEphem if you've moved beyond python2).

import ephem

sun = ephem.Sun()
obs = ephem.Observer()
obs.lat = '49'

start_year = 2015
end_year   = 2017
for iyear in range(start_year,end_year+1) :
    solstice = ephem.next_solstice(42357+(iyear-2015)*365.25)
    print("December solstice in", iyear, "is at", solstice, "UTC")

    print("Shortest day of the year, by longitude:")
    print("Date  Longitude")
    for lon in range(-180, 180+10, 10) :
        tzoffset = lon/15/24;
        obs.lon = str(lon)

        # Start with a date that makes the next transit of the Sun two or three
        # days prior to the solstice.
        obs.date = solstice-3
        sun.compute (obs)

        data = []
        for day in range(6) :
            obs.date = obs.next_transit(sun)
            sun.compute (obs)
            day_length = obs.next_setting(sun) - obs.previous_rising(sun)
            date = ephem.Date(obs.date+tzoffset)
            data.append ((day, date, day_length))

        shortest = min(data, key=lambda entry: entry[2])
        if (shortest[0] == 0) or (shortest[0] == 5) :
            raise RuntimeError("Can't find shortest day")
        print("12/"+str(shortest[1].datetime().day), lon)

Note that if you change the start and end years so that you can see up to 2196, you'll see that the shortest day of the year in that year for much of the northern hemisphere will occur on the 20th of December.

  • $\begingroup$ Uh, for much of the world at latitude 49N, you mean? $\endgroup$
    – user21
    Jan 4, 2016 at 3:29
  • $\begingroup$ @barrycarter - For much of the northern hemisphere. Latitude doesn't make much of a difference so long as the latitude is north of the equator and south of the Arctic Circle. $\endgroup$ Jan 4, 2016 at 5:12
  • $\begingroup$ According to stellafane.org/misc/equinox.html the 2196 solstice occurs at Wed, 21 Dec 2196 02:55:29 GMT. To me, this suggests that, for over half the northern hemisphere, the 21st would be shorter? $\endgroup$
    – user21
    Jan 4, 2016 at 5:15
  • $\begingroup$ @barrycarter - That was a typo. It should have been 2096, not 2196. $\endgroup$ Jan 4, 2016 at 5:38
  • $\begingroup$ That's a bit better, since the solstice is at Thu, 20 Dec 2096 20:45:24 GMT but I still suspect that, for a decent chunk of the world, the 21st is shorter. More later, but you might check w/ other latitudes and/or use skyfield, which should be more accurate. $\endgroup$
    – user21
    Jan 4, 2016 at 5:45

EDIT: Ignore below, see comments for correction.

@DavidHammen, I ran your script with start and stop year both set to 2096, and got this:

('December solstice in', 2096, 'is at', 2096/12/20 20:45:17, 'UTC')

Shortest day of the year, by longitude:
Date  Longitude
('12/19', -180)
('12/19', -170)
('12/19', -160)
('12/19', -150)
('12/19', -140)
('12/19', -130)
('12/19', -120)
('12/19', -110)
('12/19', -100)
('12/19', -90)
('12/19', -80)
('12/19', -70)
('12/19', -60)
('12/19', -50)
('12/19', -40)
('12/19', -30)
('12/19', -20)
('12/19', -10)
('12/20', 0)
('12/20', 10)
('12/20', 20)
('12/20', 30)
('12/20', 40)
('12/20', 50)
('12/21', 60)
('12/21', 70)
('12/21', 80)
('12/21', 90)
('12/21', 100)
('12/21', 110)
('12/21', 120)
('12/21', 130)
('12/21', 140)
('12/21', 150)
('12/21', 160)
('12/21', 170)
('12/20', 180)

I take it you're getting different results?

  • $\begingroup$ My answer starts with Here's a simple python3 script. You are using python2. $\endgroup$ Jan 5, 2016 at 3:15
  • $\begingroup$ Fair enough, but the answers should be similar. Has there been any major change to any of the functions you use between python2 and python3? $\endgroup$
    – user21
    Jan 5, 2016 at 15:18
  • $\begingroup$ It's line 18 in my script, tzoffset = lon/15/24 . To make that work in python2, change that line to tzoffset = lon/15./24. . $\endgroup$ Jan 5, 2016 at 16:03
  • $\begingroup$ OK, that shows 12/20 is shorter through 50E, and 12/21 is shorter 60E and further east. Is that what you're getting? $\endgroup$
    – user21
    Jan 5, 2016 at 16:06
  • $\begingroup$ That's exactly what I'm getting. There is some variation with latitude. This was intended to be a quick and dirty throwaway script, so I didn't bother make it interoperable between python3 and python2, make it take command line arguments, etc. $\endgroup$ Jan 5, 2016 at 16:11

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .