# list of dates for vernal equinox

I'm trying to get a list of dates and times of the vernal equinox for the last 30 years (or some other time interval). I'm flailing about and really have gotten nowhere. When I've tried typing vernal equinox followed by Ctrl+=, it returns the date and time of the current vernal equinox. Actually, it converts my input into that date and time. I'd like to be able to get a list of a bunch of those dates, but really don't know how to start. Ultimately, I want to graph them over some number of years and see what it looks like.

• I would simply import one of the online lists of equinox dates and computationally extract the relevant information, or == vernal equinox 1900 and so on for each year... or make a list. – David G. Stork Mar 20 '18 at 18:42
• This would work if you want to stay in Mathematica, WolframAlpha[ "vernal equinox " <> IntegerString[#], {{"Result", 1}, "FormattedData"}] & /@ Range[1990, 2018], but it is slow. This is probably a good source. – Jason B. Mar 20 '18 at 19:01
• @David Thanks. I didn't know how to enter an argument into that. However I tried to substitute a list of 2 years from 1900 in your example, and it returned the information for the 1st year in my list. Also, since it's grabbing this from Alpha, I'm having trouble extracting just the date and time. – Mitchell Kaplan Mar 20 '18 at 19:03
• @JasonB. That seems to give me what I was looking for, I just need to understand how it works. Thanks very much. That NASA site is great! - I wonder why it didn't come up when I googled vernal equinox. – Mitchell Kaplan Mar 20 '18 at 19:10
• A more direct way of doing what @JasonB. suggests: WolframAlpha["vernal equinox " <> ToString[#], "WolframResult"] & /@ Range[1990, 2018] – chuy Mar 20 '18 at 20:30

Here's a quick-and-dirty way to roughly reckon out dates for the vernal and autumnal equnoxes, based on the fact that the solar declination should be zero at those points:

Block[{$TimeZone = "Zulu"}, {tmin, tmax} = AbsoluteTime /@ {DatePlus[DateObject[{2018, 3, 20}], Quantity[-10, "Years"]], DateObject[{2018, 3, 21}]}; decPlot = Plot[QuantityMagnitude[Last[SunPosition[DateObject[t], CelestialSystem -> "Equatorial"]]], {t, tmin, tmax}, Mesh -> {{0}}, MeshFunctions -> {#2 &}, MeshStyle -> {}]]  equinoxes = Sort[Cases[Normal[decPlot], Point[{x_, y_}] :> x, ∞]] Block[{$TimeZone = "Zulu"},
GatherBy[DateString /@ equinoxes, DateValue[#, "Month"] &]]
{{"Thu 20 Mar 2008 05:50:46", "Fri 20 Mar 2009 11:29:56", "Sat 20 Mar 2010 18:43:46",
"Sun 20 Mar 2011 23:22:50", "Tue 20 Mar 2012 05:16:46", "Wed 20 Mar 2013 11:04:17",
"Thu 20 Mar 2014 17:27:34", "Fri 20 Mar 2015 23:45:52", "Sun 20 Mar 2016 04:32:45",
"Mon 20 Mar 2017 10:32:21", "Tue 20 Mar 2018 16:18:20"},
{"Mon 22 Sep 2008 15:42:34", "Tue 22 Sep 2009 20:18:07", "Thu 23 Sep 2010 02:42:48",
"Fri 23 Sep 2011 08:55:06", "Sat 22 Sep 2012 14:44:34", "Sun 22 Sep 2013 20:41:21",
"Tue 23 Sep 2014 01:43:04", "Wed 23 Sep 2015 08:21:23", "Thu 22 Sep 2016 14:05:43",
"Fri 22 Sep 2017 19:59:57"}}


where the dates in March are vernal equinoxes, and the dates in September are autumnal equinoxes.

If need be, one can then use FindRoot[] for a refined estimate of the equinox date:

declination[t_?NumericQ] :=
QuantityMagnitude[Last[SunPosition[DateObject[t], CelestialSystem -> "Equatorial"]]]

Block[{\$TimeZone = "Zulu"},
DateString[t /. FindRoot[declination[t],
{t, AbsoluteTime["19 Mar 2018 23:59:59"],
AbsoluteTime["21 Mar 2018 23:59:59"]}]]]
"Tue 20 Mar 2018 16:18:14"

• Far more than I was originally looking for, but extremely interesting. This opens up a number of things I did not know about. – Mitchell Kaplan Mar 21 '18 at 13:08
• Of course, these are only estimates; I find that they can be off by a few minutes or hours from USNO's calculations. I'm not sure where the source of discrepancy is, tho. – J. M.'s ennui Mar 21 '18 at 13:16