CITE THIS NOTEBOOK: What is the winter solstice? by Jose Martin-Garcia. Wolfram Community Dec 21 2022.
This year 2022 the winter solstice happens today December 21st, at 21:48 GMT in the UTC time system. We frequently find explanations associating the winter solstice to the shortest day of the year. This only defines a day of the year, not an instant. How is that instant defined? The new Astro functionality in version 13.2 of the Wolfram Language allows us to define and find the solstice instant with high precision.
Traditionally, the defining event for the winter solstice is that the Sun reaches its lowest value of declination in the year. Declination is the latitude value of the spherical coordinate system associated to the equatorial frame. In other words, it is the angular distance from the Sun to the projection of Earth’s equator on the celestial sphere. Its current value as I write this post is:
AstroPosition,"Equatorial"["Declination"]
-23.4379
Define a function for the declination of the Sun:
sunDeclination[date_?DateObjectQ]:=AstroPosition,{"Equatorial",date}["Declination"]
This is how it changed throughout year 2022:
DateListPlotTable{date,sunDeclination[date]},date,DateRange,
FindMinimum[sunDeclination[DateObject[{2022,12,21,0,0,s},TimeZone->0]],{s,0,86400}]
{-23.4381,{s78754.2}}
DateObject[{2022,12,21,0,0,s/.Last[%]},TimeZone->0]
Finding a minimum with high precision is difficult, because the curve is nearly flat around the minimum, so a different definition is used in astronomical almanacs: the ecliptic longitude of the Sun is 270 degrees. We can compute it with AstroPosition, again for the current instant as I write this post:
AstroPosition,"Ecliptic"["Longitude"]
269.733
As before, define a function and compute it for year 2022:
sunLongitude[date_?DateObjectQ]:=AstroPosition,{"Ecliptic",date}["Longitude"]
DateListPlotTable{date,sunLongitude[date]},date,DateRange,
When this function takes values 0, 90, 180 and 270 degrees we have spring equinox, summer solstice, autumn equinox and winter solstice, respectively. The exact instant of the winter solstice can be found with FindRoot:
FindRoot[sunLongitude[DateObject[{2022,12,21,0,0,s},TimeZone->0]]-270,{s,0,86400}]
{s78493.}
DateObject[{2022,12,21,0,0,s/.Last[%]},TimeZone->0]
This is the value quoted in the astronomical almanacs, and we see that it differs by several minutes from the value computed using solar declination.
These computations take into account various effects, for example the fact that light from the Sun takes more than 8 minutes to reach us, or light aberration due to the motion of the Earth around the Sun. There is also freedom of choice of true equatorial/ecliptic coordinates, taking nutation into account (which is what we choose by default), or mean coordinates averaging over nutation. We could also discuss which time system is selected (UTC is our default), independently of the time zones. This is all automatically taken care of by AstroPosition, and will be discussed in detail in future posts about the new Astro functionality.