<p>What you need is the Sun's <a href="https://en.wikipedia.org/wiki/Ecliptic_coordinate_system" rel="nofollow noreferrer">ecliptic longitude</a> for a given date.
As you expect, it increases faster near perihelion (1.02°/day in early January) and slower near aphelion (0.95°/day in early July).
It is exactly 0° at the March equinox, 90° at the June solstice, 180° at the September equinox, and 270° at the December solstice.</p>
<p><a href="https://en.wikipedia.org/wiki/Position_of_the_Sun#Ecliptic_coordinates" rel="nofollow noreferrer">Wikipedia:Position of the Sun</a> gives an approximation, taken from the Astronomical Almanac, for the Sun's ecliptic longitude as a function of the date:
<span class="math-container">$$\begin{align}
n &amp;= \text{JD} - 2451545.0 \\
L &amp;= 280.460^\circ + 0.9856474^\circ n \\
g &amp;= 357.528^\circ + 0.9856003^\circ n \\
\lambda &amp;\approx L + 1.915^\circ \sin g + 0.020^\circ \sin 2g 
\end{align}$$</span>
<em>n</em> is the number of days since 2000-01-01 12:00 TT; 2021-01-01 00:00 is JD 2459215.5.
<br/><em>L</em> is the Sun's mean longitude relative to the March equinox as if the Earth's motion were circular at a constant speed.
<br/><em>g</em> is the Earth's mean anomaly relative to perihelion.
<br/><em>λ</em> is the Sun's longitude; the 1.9° coefficient of the second term is related to the 2-day misalignment you described.</p>
<p>The spreadsheet <a href="https://www.esrl.noaa.gov/gmd/grad/solcalc/calcdetails.html" rel="nofollow noreferrer">NOAA_Solar_Calculations_year</a> implements a more sophisticated formula from Meeus <a href="https://www.goodreads.com/book/show/425217.Astronomical_Algorithms" rel="nofollow noreferrer">Astronomical Algorithms</a> chapter 25.
If you set appropriate values in cells B2..B6, column P gives the Sun's longitude on the date in column D.</p>
<p>You can also request an ephemeris from <a href="https://ssd.jpl.nasa.gov/horizons.cgi" rel="nofollow noreferrer">JPL HORIZONS</a> with these settings:
<br/>Target Body: Sun [Sol] [10]
<br/>Observer Location: Geocentric [50]
<br/>Time Span: your calendar year
<br/>Table Settings: QUANTITIES=31 (Observer ecliptic lon. &amp; lat.)</p>

CC BY-SA 4.0
2020-12-06T06:57:08.960Z
Does this mean OP could make an elliptical shaped calendar which would line up with cardinal points for the solstices and equinox?
DarcyThomas
CC BY-SA 4.0
2020-12-06T14:32:20.950Z
@DarcyThomas Those points would line up whether the distance from center to edge were constant or not.
Mike G
CC BY-SA 4.0
2020-12-05T20:15:24.017Z
2020-12-06T02:07:53.697Z
2020-12-06T02:07:53.697Z
Mike G
<p>The fact that equinox and solstice dates don’t line up with the quadrants of the circle is due to the ellipticity and eccentricity of Earth’s orbit around the Sun.</p>
<p>Let’s go back in history a little. Ancient Greeks thought all celestial movements were circular. This model was followed for approximately 2,000 years until Copernicus finally realized the Earth is a planet and Kepler realized all planets orbit the Sun on elliptical, not circular, paths.</p>
<p>The astrolabe, an instrument invented by the Greeks and perfected by the Arabs and Muslims (and please, no discussion about this here; it’s not the place for that) and used until the late Renaissance, follows this “circles-only-and-Earth-in-the-middle” model.</p>
<p>One possible back for the astrolabe (there are many variations—I know; I’m an astrolabist) includes a circular ecliptic and a circular calendar. Either the calendar’s graduations are unevenly spaced, or they are evenly spaced but the calendar is offset from the centre of the ecliptic “circle.”</p>
<p>The offset is calculated by <span class="math-container">$2er$</span>, where <span class="math-container">$e$</span> is the eccentricity of Earth’s orbit and <span class="math-container">$r$</span> is the radius of the calendar. The direction of the offset is <span class="math-container">$\pi\ +\ 180°$</span>, where <span class="math-container">$\pi$</span> is the longitude of the perihelion of Earth’s orbit.</p>
<p>More details can be found in the books <em>The Astrolabe</em> by James Morrison and <em>The History and Practice of Ancient Astronomy</em> by James Evans.</p>

CC BY-SA 4.0
2020-12-05T20:11:21.853Z
2020-12-05T20:11:21.853Z
Pierre Paquette
<p>By looking at <a href="https://en.wikipedia.org/wiki/Solstice" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Solstice</a>, we find the dates for equinox and solstice in 2021 as March 20, June 21, Sep 22, and Dec 21.
These correspond to days 79,172,265,355.</p>
<p>That gives us differences of 89, 93, 93,and 90 days. Points need to be 90/89 degrees apart in the first quadrant, 90/93 degrees apart in the second quadrant, etc... Care needs to be taken at the quadrant transitions. I used matlab to get the degrees for each quadrant and then rotate the whole batch by 11 to start on Jan 1.</p>
<p><code>q89 = 0:90/89:89; q90 = 0:1:89; q93 = [0:90/93:89 , 89]; spacing = [q89 q93+90 q93+180 q90+270]; spacing = [spacing(12:365) spacing(1:11)]';</code></p>
<p>This code probably isn't too useful if you don't have matlab, so here are the 365 values in degrees clockwise from North starting with Jan 1.  Note that the solstice/equinox days of the year: 79, 172, 265, 355 have values of exactly 90, 180, 270, and 0 degrees, fixing them to the cardinal points on the circle.</p>
<pre><code>1   11.12
2   12.13
3   13.15
4   14.16
5   15.17
6   16.18
7   17.19
8   18.2
9   19.21
10  20.22
11  21.24
12  22.25
13  23.26
14  24.27
15  25.28
16  26.29
17  27.3
18  28.31
19  29.33
20  30.34
21  31.35
22  32.36
23  33.37
24  34.38
25  35.39
26  36.4
27  37.42
28  38.43
29  39.44
30  40.45
31  41.46
32  42.47
33  43.48
34  44.49
35  45.51
36  46.52
37  47.53
38  48.54
39  49.55
40  50.56
41  51.57
42  52.58
43  53.6
44  54.61
45  55.62
46  56.63
47  57.64
48  58.65
49  59.66
50  60.67
51  61.69
52  62.7
53  63.71
54  64.72
55  65.73
56  66.74
57  67.75
58  68.76
59  69.78
60  70.79
61  71.8
62  72.81
63  73.82
64  74.83
65  75.84
66  76.85
67  77.87
68  78.88
69  79.89
70  80.9
71  81.91
72  82.92
73  83.93
74  84.94
75  85.96
76  86.97
77  87.98
78  88.99
79  90
80  90.97
81  91.94
82  92.9
83  93.87
84  94.84
85  95.81
86  96.77
87  97.74
88  98.71
89  99.68
90  100.65
91  101.61
92  102.58
93  103.55
94  104.52
95  105.48
96  106.45
97  107.42
98  108.39
99  109.35
100 110.32
101 111.29
102 112.26
103 113.23
104 114.19
105 115.16
106 116.13
107 117.1
108 118.06
109 119.03
110 120
111 120.97
112 121.94
113 122.9
114 123.87
115 124.84
116 125.81
117 126.77
118 127.74
119 128.71
120 129.68
121 130.65
122 131.61
123 132.58
124 133.55
125 134.52
126 135.48
127 136.45
128 137.42
129 138.39
130 139.35
131 140.32
132 141.29
133 142.26
134 143.23
135 144.19
136 145.16
137 146.13
138 147.1
139 148.06
140 149.03
141 150
142 150.97
143 151.94
144 152.9
145 153.87
146 154.84
147 155.81
148 156.77
149 157.74
150 158.71
151 159.68
152 160.65
153 161.61
154 162.58
155 163.55
156 164.52
157 165.48
158 166.45
159 167.42
160 168.39
161 169.35
162 170.32
163 171.29
164 172.26
165 173.23
166 174.19
167 175.16
168 176.13
169 177.1
170 178.06
171 179
172 180
173 180.97
174 181.94
175 182.9
176 183.87
177 184.84
178 185.81
179 186.77
180 187.74
181 188.71
182 189.68
183 190.65
184 191.61
185 192.58
186 193.55
187 194.52
188 195.48
189 196.45
190 197.42
191 198.39
192 199.35
193 200.32
194 201.29
195 202.26
196 203.23
197 204.19
198 205.16
199 206.13
200 207.1
201 208.06
202 209.03
203 210
204 210.97
205 211.94
206 212.9
207 213.87
208 214.84
209 215.81
210 216.77
211 217.74
212 218.71
213 219.68
214 220.65
215 221.61
216 222.58
217 223.55
218 224.52
219 225.48
220 226.45
221 227.42
222 228.39
223 229.35
224 230.32
225 231.29
226 232.26
227 233.23
228 234.19
229 235.16
230 236.13
231 237.1
232 238.06
233 239.03
234 240
235 240.97
236 241.94
237 242.9
238 243.87
239 244.84
240 245.81
241 246.77
242 247.74
243 248.71
244 249.68
245 250.65
246 251.61
247 252.58
248 253.55
249 254.52
250 255.48
251 256.45
252 257.42
253 258.39
254 259.35
255 260.32
256 261.29
257 262.26
258 263.23
259 264.19
260 265.16
261 266.13
262 267.1
263 268.06
264 269
265 270
266 271
267 272
268 273
269 274
270 275
271 276
272 277
273 278
274 279
275 280
276 281
277 282
278 283
279 284
280 285
281 286
282 287
283 288
284 289
285 290
286 291
287 292
288 293
289 294
290 295
291 296
292 297
293 298
294 299
295 300
296 301
297 302
298 303
299 304
300 305
301 306
302 307
303 308
304 309
305 310
306 311
307 312
308 313
309 314
310 315
311 316
312 317
313 318
314 319
315 320
316 321
317 322
318 323
319 324
320 325
321 326
322 327
323 328
324 329
325 330
326 331
327 332
328 333
329 334
330 335
331 336
332 337
333 338
334 339
335 340
336 341
337 342
338 343
339 344
340 345
341 346
342 347
343 348
344 349
345 350
346 351
347 352
348 353
349 354
350 355
351 356
352 357
353 358
354 359
355 0
356 1.01
357 2.02
358 3.03
359 4.04
360 5.06
361 6.07
362 7.08
363 8.09
364 9.1
365 10.11
</code></pre>

CC BY-SA 4.0
2020-12-05T18:54:59.010Z
2020-12-07T18:07:11.437Z
2020-12-07T18:07:11.437Z
Connor Garcia
<p>As Mike G said, the Sun's ecliptic longitude is ideal for this application.</p>
<p>I see from your profile that you're a coder, with some knowledge of Python. Here's a short Python script that prints solar ecliptic longitudes for each day for any given year. (It actually prints 367 days, I figured an extra day or two may be useful). The code mostly avoids features peculiar to Python, so it should be fairly easy to translate into other languages.</p>
<p>My code uses the algorithm that Mike G has mentioned from <a href="https://en.wikipedia.org/wiki/Position_of_the_Sun#Ecliptic_coordinates" rel="nofollow noreferrer">Wikipedia</a>. (I also tried another algorithm from that page, but it's not sufficiently accurate).</p>
<pre><code>&quot;&quot;&quot;
 Approx Sun ecliptic longitude

 Prints daily positions for a year.
 For dates between 1950 and 2050,
 it should be accurate to within
 0.01 degrees. For details, see
 https://en.wikipedia.org/wiki/Position_of_the_Sun#Ecliptic_coordinates

 Written by PM 2Ring 2020.12.6
&quot;&quot;&quot;

from math import sin, radians
from datetime import timedelta, date

# Approximate solar ecliptic longitude
# Uses day zero = Noon UTC, 1 Jan 2000
# so we subtract half a day
def eclon_approx(n):
    n -= 0.5
    L = 280.46 + 0.9856474 * n
    g = 357.528 + 0.9856003 * n
    gr = radians(g)
    el = L + 1.915 * sin(gr) + 0.020 * sin(2 * gr)
    return el % 360

oneday = timedelta(days=1)
day_zero = date(year=2000, month=1, day=1)

@interact
def main(year=2000):
    day = date(year=year, month=1, day=1)
    d = (day - day_zero).days
    for i in range(367):
        angle = eclon_approx(d)
        print('{:03d}, &quot;{:%b-%d}&quot;, {:6.2f}'.format(i, day, angle))
        day += oneday
        d += 1

</code></pre>
<p>Here's the output for 2021:</p>
<pre><code>000, &quot;Jan-01&quot;, 280.79
001, &quot;Jan-02&quot;, 281.80
002, &quot;Jan-03&quot;, 282.82
003, &quot;Jan-04&quot;, 283.84
004, &quot;Jan-05&quot;, 284.86
005, &quot;Jan-06&quot;, 285.88
006, &quot;Jan-07&quot;, 286.90
007, &quot;Jan-08&quot;, 287.92
008, &quot;Jan-09&quot;, 288.94
009, &quot;Jan-10&quot;, 289.96
010, &quot;Jan-11&quot;, 290.98
011, &quot;Jan-12&quot;, 292.00
012, &quot;Jan-13&quot;, 293.02
013, &quot;Jan-14&quot;, 294.03
014, &quot;Jan-15&quot;, 295.05
015, &quot;Jan-16&quot;, 296.07
016, &quot;Jan-17&quot;, 297.09
017, &quot;Jan-18&quot;, 298.11
018, &quot;Jan-19&quot;, 299.13
019, &quot;Jan-20&quot;, 300.14
020, &quot;Jan-21&quot;, 301.16
021, &quot;Jan-22&quot;, 302.18
022, &quot;Jan-23&quot;, 303.20
023, &quot;Jan-24&quot;, 304.21
024, &quot;Jan-25&quot;, 305.23
025, &quot;Jan-26&quot;, 306.25
026, &quot;Jan-27&quot;, 307.26
027, &quot;Jan-28&quot;, 308.28
028, &quot;Jan-29&quot;, 309.30
029, &quot;Jan-30&quot;, 310.31
030, &quot;Jan-31&quot;, 311.33
031, &quot;Feb-01&quot;, 312.34
032, &quot;Feb-02&quot;, 313.36
033, &quot;Feb-03&quot;, 314.37
034, &quot;Feb-04&quot;, 315.39
035, &quot;Feb-05&quot;, 316.40
036, &quot;Feb-06&quot;, 317.41
037, &quot;Feb-07&quot;, 318.43
038, &quot;Feb-08&quot;, 319.44
039, &quot;Feb-09&quot;, 320.45
040, &quot;Feb-10&quot;, 321.47
041, &quot;Feb-11&quot;, 322.48
042, &quot;Feb-12&quot;, 323.49
043, &quot;Feb-13&quot;, 324.50
044, &quot;Feb-14&quot;, 325.51
045, &quot;Feb-15&quot;, 326.52
046, &quot;Feb-16&quot;, 327.53
047, &quot;Feb-17&quot;, 328.54
048, &quot;Feb-18&quot;, 329.55
049, &quot;Feb-19&quot;, 330.56
050, &quot;Feb-20&quot;, 331.57
051, &quot;Feb-21&quot;, 332.58
052, &quot;Feb-22&quot;, 333.58
053, &quot;Feb-23&quot;, 334.59
054, &quot;Feb-24&quot;, 335.60
055, &quot;Feb-25&quot;, 336.60
056, &quot;Feb-26&quot;, 337.61
057, &quot;Feb-27&quot;, 338.61
058, &quot;Feb-28&quot;, 339.62
059, &quot;Mar-01&quot;, 340.62
060, &quot;Mar-02&quot;, 341.63
061, &quot;Mar-03&quot;, 342.63
062, &quot;Mar-04&quot;, 343.63
063, &quot;Mar-05&quot;, 344.63
064, &quot;Mar-06&quot;, 345.64
065, &quot;Mar-07&quot;, 346.64
066, &quot;Mar-08&quot;, 347.64
067, &quot;Mar-09&quot;, 348.64
068, &quot;Mar-10&quot;, 349.64
069, &quot;Mar-11&quot;, 350.64
070, &quot;Mar-12&quot;, 351.64
071, &quot;Mar-13&quot;, 352.63
072, &quot;Mar-14&quot;, 353.63
073, &quot;Mar-15&quot;, 354.63
074, &quot;Mar-16&quot;, 355.62
075, &quot;Mar-17&quot;, 356.62
076, &quot;Mar-18&quot;, 357.62
077, &quot;Mar-19&quot;, 358.61
078, &quot;Mar-20&quot;, 359.60
079, &quot;Mar-21&quot;,   0.60
080, &quot;Mar-22&quot;,   1.59
081, &quot;Mar-23&quot;,   2.58
082, &quot;Mar-24&quot;,   3.58
083, &quot;Mar-25&quot;,   4.57
084, &quot;Mar-26&quot;,   5.56
085, &quot;Mar-27&quot;,   6.55
086, &quot;Mar-28&quot;,   7.54
087, &quot;Mar-29&quot;,   8.53
088, &quot;Mar-30&quot;,   9.51
089, &quot;Mar-31&quot;,  10.50
090, &quot;Apr-01&quot;,  11.49
091, &quot;Apr-02&quot;,  12.48
092, &quot;Apr-03&quot;,  13.46
093, &quot;Apr-04&quot;,  14.45
094, &quot;Apr-05&quot;,  15.43
095, &quot;Apr-06&quot;,  16.42
096, &quot;Apr-07&quot;,  17.40
097, &quot;Apr-08&quot;,  18.39
098, &quot;Apr-09&quot;,  19.37
099, &quot;Apr-10&quot;,  20.35
100, &quot;Apr-11&quot;,  21.33
101, &quot;Apr-12&quot;,  22.31
102, &quot;Apr-13&quot;,  23.29
103, &quot;Apr-14&quot;,  24.27
104, &quot;Apr-15&quot;,  25.25
105, &quot;Apr-16&quot;,  26.23
106, &quot;Apr-17&quot;,  27.21
107, &quot;Apr-18&quot;,  28.19
108, &quot;Apr-19&quot;,  29.17
109, &quot;Apr-20&quot;,  30.14
110, &quot;Apr-21&quot;,  31.12
111, &quot;Apr-22&quot;,  32.10
112, &quot;Apr-23&quot;,  33.07
113, &quot;Apr-24&quot;,  34.05
114, &quot;Apr-25&quot;,  35.02
115, &quot;Apr-26&quot;,  35.99
116, &quot;Apr-27&quot;,  36.97
117, &quot;Apr-28&quot;,  37.94
118, &quot;Apr-29&quot;,  38.91
119, &quot;Apr-30&quot;,  39.88
120, &quot;May-01&quot;,  40.85
121, &quot;May-02&quot;,  41.82
122, &quot;May-03&quot;,  42.79
123, &quot;May-04&quot;,  43.76
124, &quot;May-05&quot;,  44.73
125, &quot;May-06&quot;,  45.70
126, &quot;May-07&quot;,  46.67
127, &quot;May-08&quot;,  47.64
128, &quot;May-09&quot;,  48.61
129, &quot;May-10&quot;,  49.57
130, &quot;May-11&quot;,  50.54
131, &quot;May-12&quot;,  51.50
132, &quot;May-13&quot;,  52.47
133, &quot;May-14&quot;,  53.44
134, &quot;May-15&quot;,  54.40
135, &quot;May-16&quot;,  55.36
136, &quot;May-17&quot;,  56.33
137, &quot;May-18&quot;,  57.29
138, &quot;May-19&quot;,  58.25
139, &quot;May-20&quot;,  59.22
140, &quot;May-21&quot;,  60.18
141, &quot;May-22&quot;,  61.14
142, &quot;May-23&quot;,  62.10
143, &quot;May-24&quot;,  63.06
144, &quot;May-25&quot;,  64.03
145, &quot;May-26&quot;,  64.99
146, &quot;May-27&quot;,  65.95
147, &quot;May-28&quot;,  66.91
148, &quot;May-29&quot;,  67.87
149, &quot;May-30&quot;,  68.82
150, &quot;May-31&quot;,  69.78
151, &quot;Jun-01&quot;,  70.74
152, &quot;Jun-02&quot;,  71.70
153, &quot;Jun-03&quot;,  72.66
154, &quot;Jun-04&quot;,  73.62
155, &quot;Jun-05&quot;,  74.57
156, &quot;Jun-06&quot;,  75.53
157, &quot;Jun-07&quot;,  76.49
158, &quot;Jun-08&quot;,  77.45
159, &quot;Jun-09&quot;,  78.40
160, &quot;Jun-10&quot;,  79.36
161, &quot;Jun-11&quot;,  80.31
162, &quot;Jun-12&quot;,  81.27
163, &quot;Jun-13&quot;,  82.23
164, &quot;Jun-14&quot;,  83.18
165, &quot;Jun-15&quot;,  84.14
166, &quot;Jun-16&quot;,  85.09
167, &quot;Jun-17&quot;,  86.05
168, &quot;Jun-18&quot;,  87.00
169, &quot;Jun-19&quot;,  87.96
170, &quot;Jun-20&quot;,  88.91
171, &quot;Jun-21&quot;,  89.86
172, &quot;Jun-22&quot;,  90.82
173, &quot;Jun-23&quot;,  91.77
174, &quot;Jun-24&quot;,  92.73
175, &quot;Jun-25&quot;,  93.68
176, &quot;Jun-26&quot;,  94.63
177, &quot;Jun-27&quot;,  95.59
178, &quot;Jun-28&quot;,  96.54
179, &quot;Jun-29&quot;,  97.50
180, &quot;Jun-30&quot;,  98.45
181, &quot;Jul-01&quot;,  99.40
182, &quot;Jul-02&quot;, 100.36
183, &quot;Jul-03&quot;, 101.31
184, &quot;Jul-04&quot;, 102.26
185, &quot;Jul-05&quot;, 103.22
186, &quot;Jul-06&quot;, 104.17
187, &quot;Jul-07&quot;, 105.12
188, &quot;Jul-08&quot;, 106.08
189, &quot;Jul-09&quot;, 107.03
190, &quot;Jul-10&quot;, 107.98
191, &quot;Jul-11&quot;, 108.94
192, &quot;Jul-12&quot;, 109.89
193, &quot;Jul-13&quot;, 110.84
194, &quot;Jul-14&quot;, 111.80
195, &quot;Jul-15&quot;, 112.75
196, &quot;Jul-16&quot;, 113.71
197, &quot;Jul-17&quot;, 114.66
198, &quot;Jul-18&quot;, 115.61
199, &quot;Jul-19&quot;, 116.57
200, &quot;Jul-20&quot;, 117.52
201, &quot;Jul-21&quot;, 118.48
202, &quot;Jul-22&quot;, 119.43
203, &quot;Jul-23&quot;, 120.39
204, &quot;Jul-24&quot;, 121.34
205, &quot;Jul-25&quot;, 122.30
206, &quot;Jul-26&quot;, 123.25
207, &quot;Jul-27&quot;, 124.21
208, &quot;Jul-28&quot;, 125.16
209, &quot;Jul-29&quot;, 126.12
210, &quot;Jul-30&quot;, 127.07
211, &quot;Jul-31&quot;, 128.03
212, &quot;Aug-01&quot;, 128.99
213, &quot;Aug-02&quot;, 129.94
214, &quot;Aug-03&quot;, 130.90
215, &quot;Aug-04&quot;, 131.86
216, &quot;Aug-05&quot;, 132.81
217, &quot;Aug-06&quot;, 133.77
218, &quot;Aug-07&quot;, 134.73
219, &quot;Aug-08&quot;, 135.69
220, &quot;Aug-09&quot;, 136.65
221, &quot;Aug-10&quot;, 137.61
222, &quot;Aug-11&quot;, 138.57
223, &quot;Aug-12&quot;, 139.52
224, &quot;Aug-13&quot;, 140.48
225, &quot;Aug-14&quot;, 141.44
226, &quot;Aug-15&quot;, 142.41
227, &quot;Aug-16&quot;, 143.37
228, &quot;Aug-17&quot;, 144.33
229, &quot;Aug-18&quot;, 145.29
230, &quot;Aug-19&quot;, 146.25
231, &quot;Aug-20&quot;, 147.21
232, &quot;Aug-21&quot;, 148.18
233, &quot;Aug-22&quot;, 149.14
234, &quot;Aug-23&quot;, 150.10
235, &quot;Aug-24&quot;, 151.07
236, &quot;Aug-25&quot;, 152.03
237, &quot;Aug-26&quot;, 152.99
238, &quot;Aug-27&quot;, 153.96
239, &quot;Aug-28&quot;, 154.93
240, &quot;Aug-29&quot;, 155.89
241, &quot;Aug-30&quot;, 156.86
242, &quot;Aug-31&quot;, 157.82
243, &quot;Sep-01&quot;, 158.79
244, &quot;Sep-02&quot;, 159.76
245, &quot;Sep-03&quot;, 160.73
246, &quot;Sep-04&quot;, 161.70
247, &quot;Sep-05&quot;, 162.67
248, &quot;Sep-06&quot;, 163.63
249, &quot;Sep-07&quot;, 164.60
250, &quot;Sep-08&quot;, 165.58
251, &quot;Sep-09&quot;, 166.55
252, &quot;Sep-10&quot;, 167.52
253, &quot;Sep-11&quot;, 168.49
254, &quot;Sep-12&quot;, 169.46
255, &quot;Sep-13&quot;, 170.44
256, &quot;Sep-14&quot;, 171.41
257, &quot;Sep-15&quot;, 172.38
258, &quot;Sep-16&quot;, 173.36
259, &quot;Sep-17&quot;, 174.33
260, &quot;Sep-18&quot;, 175.31
261, &quot;Sep-19&quot;, 176.28
262, &quot;Sep-20&quot;, 177.26
263, &quot;Sep-21&quot;, 178.24
264, &quot;Sep-22&quot;, 179.22
265, &quot;Sep-23&quot;, 180.19
266, &quot;Sep-24&quot;, 181.17
267, &quot;Sep-25&quot;, 182.15
268, &quot;Sep-26&quot;, 183.13
269, &quot;Sep-27&quot;, 184.11
270, &quot;Sep-28&quot;, 185.09
271, &quot;Sep-29&quot;, 186.08
272, &quot;Sep-30&quot;, 187.06
273, &quot;Oct-01&quot;, 188.04
274, &quot;Oct-02&quot;, 189.02
275, &quot;Oct-03&quot;, 190.01
276, &quot;Oct-04&quot;, 190.99
277, &quot;Oct-05&quot;, 191.98
278, &quot;Oct-06&quot;, 192.96
279, &quot;Oct-07&quot;, 193.95
280, &quot;Oct-08&quot;, 194.94
281, &quot;Oct-09&quot;, 195.92
282, &quot;Oct-10&quot;, 196.91
283, &quot;Oct-11&quot;, 197.90
284, &quot;Oct-12&quot;, 198.89
285, &quot;Oct-13&quot;, 199.88
286, &quot;Oct-14&quot;, 200.87
287, &quot;Oct-15&quot;, 201.86
288, &quot;Oct-16&quot;, 202.85
289, &quot;Oct-17&quot;, 203.84
290, &quot;Oct-18&quot;, 204.83
291, &quot;Oct-19&quot;, 205.83
292, &quot;Oct-20&quot;, 206.82
293, &quot;Oct-21&quot;, 207.81
294, &quot;Oct-22&quot;, 208.81
295, &quot;Oct-23&quot;, 209.80
296, &quot;Oct-24&quot;, 210.80
297, &quot;Oct-25&quot;, 211.80
298, &quot;Oct-26&quot;, 212.79
299, &quot;Oct-27&quot;, 213.79
300, &quot;Oct-28&quot;, 214.79
301, &quot;Oct-29&quot;, 215.79
302, &quot;Oct-30&quot;, 216.79
303, &quot;Oct-31&quot;, 217.79
304, &quot;Nov-01&quot;, 218.79
305, &quot;Nov-02&quot;, 219.79
306, &quot;Nov-03&quot;, 220.79
307, &quot;Nov-04&quot;, 221.79
308, &quot;Nov-05&quot;, 222.79
309, &quot;Nov-06&quot;, 223.79
310, &quot;Nov-07&quot;, 224.80
311, &quot;Nov-08&quot;, 225.80
312, &quot;Nov-09&quot;, 226.80
313, &quot;Nov-10&quot;, 227.81
314, &quot;Nov-11&quot;, 228.81
315, &quot;Nov-12&quot;, 229.82
316, &quot;Nov-13&quot;, 230.83
317, &quot;Nov-14&quot;, 231.83
318, &quot;Nov-15&quot;, 232.84
319, &quot;Nov-16&quot;, 233.85
320, &quot;Nov-17&quot;, 234.85
321, &quot;Nov-18&quot;, 235.86
322, &quot;Nov-19&quot;, 236.87
323, &quot;Nov-20&quot;, 237.88
324, &quot;Nov-21&quot;, 238.89
325, &quot;Nov-22&quot;, 239.90
326, &quot;Nov-23&quot;, 240.91
327, &quot;Nov-24&quot;, 241.92
328, &quot;Nov-25&quot;, 242.93
329, &quot;Nov-26&quot;, 243.94
330, &quot;Nov-27&quot;, 244.96
331, &quot;Nov-28&quot;, 245.97
332, &quot;Nov-29&quot;, 246.98
333, &quot;Nov-30&quot;, 247.99
334, &quot;Dec-01&quot;, 249.01
335, &quot;Dec-02&quot;, 250.02
336, &quot;Dec-03&quot;, 251.03
337, &quot;Dec-04&quot;, 252.05
338, &quot;Dec-05&quot;, 253.06
339, &quot;Dec-06&quot;, 254.08
340, &quot;Dec-07&quot;, 255.09
341, &quot;Dec-08&quot;, 256.11
342, &quot;Dec-09&quot;, 257.12
343, &quot;Dec-10&quot;, 258.14
344, &quot;Dec-11&quot;, 259.16
345, &quot;Dec-12&quot;, 260.17
346, &quot;Dec-13&quot;, 261.19
347, &quot;Dec-14&quot;, 262.21
348, &quot;Dec-15&quot;, 263.22
349, &quot;Dec-16&quot;, 264.24
350, &quot;Dec-17&quot;, 265.26
351, &quot;Dec-18&quot;, 266.28
352, &quot;Dec-19&quot;, 267.29
353, &quot;Dec-20&quot;, 268.31
354, &quot;Dec-21&quot;, 269.33
355, &quot;Dec-22&quot;, 270.35
356, &quot;Dec-23&quot;, 271.37
357, &quot;Dec-24&quot;, 272.39
358, &quot;Dec-25&quot;, 273.40
359, &quot;Dec-26&quot;, 274.42
360, &quot;Dec-27&quot;, 275.44
361, &quot;Dec-28&quot;, 276.46
362, &quot;Dec-29&quot;, 277.48
363, &quot;Dec-30&quot;, 278.50
364, &quot;Dec-31&quot;, 279.52
365, &quot;Jan-01&quot;, 280.54
366, &quot;Jan-02&quot;, 281.56
</code></pre>
<p>That <code>@interact</code> decorator before the <code>main</code> function isn't standard Python, it's a feature of Sage. You can play with an interactive version of this script on a SageMath server <a href="https://sagecell.sagemath.org/?z=eJxtU9FumzAUffdXHFFVhZUSQ0raRkLaNG0PUzdV26o9Rk5wwBrYyHbUZVX_fdeEJpo2HgCfe3zuuQcTRREY3g2DNb_wbachN50avNqgM7pRfldLxvBglfYOtVDdHoNxyiujHbbGQmAvhc0YPtKiFl46rKV_klIjvys5hK5R8JKnDMrDtWbX1cSA2Gx2lujwBk_Kt0oz8IznqGVjpXTZQVB66ulSOCnJZ-v94JazmdTZk_qpBlkrkRnbzMJq9jAZW5ntyrdyReOcfZjGWW2MsbXSo0GQFMMPq7wnm-s9Hj6j-Kp0Q04LnuVFtgCLooixrTU9euFbqH4wlgZQOoUV1Fe7QzXM7FUvXxnhvZadF-lYYuxsilf1YVxnOmH_kzKI9-hkCHmP39IaVPhijMbj9_cpcnwSmtxxTjRHiZHQbu2t2Hi0otvSZ6B9rJbbIE0RiLFlrJMlo3GhcVVRvOW4uCfp4pZn1wtcEnh3Wy6ub67xBnosN1SelzdZWdwe65zPT3VLhCmCuElGTHaE3RM9z-7ykqiUU9zYZBSgTCekoCeh4xYr_c7qsPMc8wUfMWa0DPNXpxRjWrsqTxg9V1MuIdc4HLsqJJKiN9q3VR4C3wcqe0vHVYZwxkR6Qa2P9CmRQ5uTUrj9o4QDlYjBBq7waiLJgq2xGn4CBaUpEt3IeL64mTqEi6BO0va_PkqdHOtD-LHii-cln9cvKaLn5fn66rx-iVI8LxdZsX25yKgBnZxYjabSg2SSAEeRYO2ywiG7Exqw_A8OsiR-&amp;lang=python" rel="nofollow noreferrer">here</a>.</p>

CC BY-SA 4.0
2020-12-06T00:39:07.407Z
FWIW, I checked the equinox & solstice days against [this online calculator](http://romseyaustralia.com/equinox.html) for 2000, 2010, 2015, 2020 & 2030, and they seem pretty good.
PM 2Ring
CC BY-SA 4.0
2020-12-05T23:59:25.450Z
2021-02-21T12:30:36.577Z
2021-02-21T12:30:36.577Z
PM 2Ring
<p>I want to draw a calendar as a circle, with the equinoxes at the top and bottom, and the solstices at the left and right. I am prepared to accept a little inaccuracy by having exactly 365 or 366 days in the circle depending on if it is a leap year.</p>
<p>If I just divide the circle into 365 equal segments, then it does not line up. I can get the solstices to line up very closely, but the spring equinox always comes in 2 days late, and the autumnal equinox 2 days early.</p>
<p>I think this is to do with the elliptical orbit of the Earth around the Sun, and the relationship of the axes of the ellipse to the axial tilt of the Earth.</p>
<p>Can anyone help me with the mathematics required to adjust the angle taken up by each day in order to skew the days such that the equinoxes and solstices fit to the cardinal points of a circle?</p>

CC BY-SA 4.0
2020-12-05T17:27:46.583Z
Is dividing each quadrant into sections of different sizes, so each one contains exactly the number of days between each Solstice/Equinox and the last one acceptable, or are you requiring that each day take up exactly the same angular size on the circle?
notovny
CC BY-SA 4.0
2020-12-05T23:33:31.043Z
That might do, simply squash the number of days into the quarter. And yes, they won't be the same angular size, that's the point.
PhilHibbs
CC BY-SA 4.0
2020-12-07T18:24:45.383Z
@notovny This squash and stretch is my ugly brute force solution below, which is an unsatisfying astronomy answer, but the only one to perfectly align the solstices/equinoxes to the cardinal points of the circle as requested.
Connor Garcia
CC BY-SA 4.0
2020-12-07T22:42:40.870Z
I had a brief look at a few other sites that have solstice & equinox data, and the one I linked in the comment on my answer seemed to be pretty good. One site had an error of a day for June 2020, but the time was correct. I guess it was a typo & the data was copied manually. I have no idea what algorithm the linked site uses. It may not be that new, since the site mentions TDT, which has been superseded by [Terrestrial Time](https://en.wikipedia.org/wiki/Terrestrial_Time).
PM 2Ring
CC BY-SA 4.0
2020-12-07T23:38:57.260Z
@PM2Ring I think your answer is the most elegant and relevant astronomy answer given, and I upvoted it.  However, your solstices/equinoxes corresponding calendar angles are still a few 10ths of degrees off the cardinal points of the circle (probably not enough to matter for Phil's purposes).
Connor Garcia
CC BY-SA 4.0
2020-12-07T23:41:40.703Z
@ConnorGarcia I think that is because the exact moment of the equinox or solstice is not at midnight UTC. They seem pretty close to the time of day.
PhilHibbs
CC BY-SA 4.0
2020-12-08T00:26:23.487Z
Thanks, @Connor. What Phil said is correct. That algorithm I used is pretty good, but it is a simplification. But it should be adequate for Phil's purpose. A more accurate algorithm would solve Kepler's equation rather than approximating it with sin(g) & sin(2g), but the error in that approximation is small because the eccentricity of Earth's orbit is only about 0.0167. An even better algorithm that'd cover a longer time span would account for variation in the eccentricity due to perturbations from other planets (primarily Venus & Jupiter).
PM 2Ring
<orbit><equinox><solstice>
Aligning the equinoxes to the cardinal points on a circular calendar
PhilHibbs
# Aligning the equinoxes to the cardinal points on a circular calendar

(Asked by: username_0 on 2020-12-05)

I want to draw a calendar as a circle, with the equinoxes at the top and bottom, and the solstices at the left and right. I am prepared to accept a little inaccuracy by having exactly 365 or 366 days in the circle depending on if it is a leap year.

If I just divide the circle into 365 equal segments, then it does not line up. I can get the solstices to line up very closely, but the spring equinox always comes in 2 days late, and the autumnal equinox 2 days early.

I think this is to do with the elliptical orbit of the Earth around the Sun, and the relationship of the axes of the ellipse to the axial tilt of the Earth.

Can anyone help me with the mathematics required to adjust the angle taken up by each day in order to skew the days such that the equinoxes and solstices fit to the cardinal points of a circle?

**Tags:** orbit, equinox, solstice

> **Comments:**
> **username_1**: Is dividing each quadrant into sections of different sizes, so each one contains exactly the number of days between each Solstice/Equinox and the last one acceptable, or are you requiring that each day take up exactly the same angular size on the circle?  
> **username_0**: That might do, simply squash the number of days into the quarter. And yes, they won't be the same angular size, that's the point.  
> **username_2**: @username_1 This squash and stretch is my ugly brute force solution below, which is an unsatisfying astronomy answer, but the only one to perfectly align the solstices/equinoxes to the cardinal points of the circle as requested.  
> **username_3**: I had a brief look at a few other sites that have solstice & equinox data, and the one I linked in the comment on my answer seemed to be pretty good. One site had an error of a day for June 2020, but the time was correct. I guess it was a typo & the data was copied manually. I have no idea what algorithm the linked site uses. It may not be that new, since the site mentions TDT, which has been superseded by [Terrestrial Time](https://en.wikipedia.org/wiki/Terrestrial_Time).  
> **username_2**: @PM2Ring I think your answer is the most elegant and relevant astronomy answer given, and I upvoted it.  However, your solstices/equinoxes corresponding calendar angles are still a few 10ths of degrees off the cardinal points of the circle (probably not enough to matter for Phil's purposes).  
> **username_0**: @ConnorGarcia I think that is because the exact moment of the equinox or solstice is not at midnight UTC. They seem pretty close to the time of day.  
> **username_3**: Thanks, @Connor. What Phil said is correct. That algorithm I used is pretty good, but it is a simplification. But it should be adequate for Phil's purpose. A more accurate algorithm would solve Kepler's equation rather than approximating it with sin(g) & sin(2g), but the error in that approximation is small because the eccentricity of Earth's orbit is only about 0.0167. An even better algorithm that'd cover a longer time span would account for variation in the eccentricity due to perturbations from other planets (primarily Venus & Jupiter).  

---

## 4 answers

### Answer by username_3 on 2020-12-05. Score: 5 | Accepted answer

As username_4 said, the Sun's ecliptic longitude is ideal for this application.
I see from your profile that you're a coder, with some knowledge of Python. Here's a short Python script that prints solar ecliptic longitudes for each day for any given year. (It actually prints 367 days, I figured an extra day or two may be useful). The code mostly avoids features peculiar to Python, so it should be fairly easy to translate into other languages.
My code uses the algorithm that username_4 has mentioned from Wikipedia. (I also tried another algorithm from that page, but it's not sufficiently accurate).
"""
 Approx Sun ecliptic longitude

 Prints daily positions for a year.
 For dates between 1950 and 2050,
 it should be accurate to within
 0.01 degrees. For details, see
 https://en.wikipedia.org/wiki/Position_of_the_Sun#Ecliptic_coordinates

 Written by username_3 2020.12.6
"""

from math import sin, radians
from datetime import timedelta, date

# Approximate solar ecliptic longitude
# Uses day zero = Noon UTC, 1 Jan 2000
# so we subtract half a day
def eclon_approx(n):
    n -= 0.5
    L = 280.46 + 0.9856474 * n
    g = 357.528 + 0.9856003 * n
    gr = radians(g)
    el = L + 1.915 * sin(gr) + 0.020 * sin(2 * gr)
    return el % 360

oneday = timedelta(days=1)
day_zero = date(year=2000, month=1, day=1)

@interact
def main(year=2000):
    day = date(year=year, month=1, day=1)
    d = (day - day_zero).days
    for i in range(367):
        angle = eclon_approx(d)
        print('{:03d}, "{:%b-%d}", {:6.2f}'.format(i, day, angle))
        day += oneday
        d += 1


Here's the output for 2021:
000, "Jan-01", 280.79
001, "Jan-02", 281.80
002, "Jan-03", 282.82
003, "Jan-04", 283.84
004, "Jan-05", 284.86
005, "Jan-06", 285.88
006, "Jan-07", 286.90
007, "Jan-08", 287.92
008, "Jan-09", 288.94
009, "Jan-10", 289.96
010, "Jan-11", 290.98
011, "Jan-12", 292.00
012, "Jan-13", 293.02
013, "Jan-14", 294.03
014, "Jan-15", 295.05
015, "Jan-16", 296.07
016, "Jan-17", 297.09
017, "Jan-18", 298.11
018, "Jan-19", 299.13
019, "Jan-20", 300.14
020, "Jan-21", 301.16
021, "Jan-22", 302.18
022, "Jan-23", 303.20
023, "Jan-24", 304.21
024, "Jan-25", 305.23
025, "Jan-26", 306.25
026, "Jan-27", 307.26
027, "Jan-28", 308.28
028, "Jan-29", 309.30
029, "Jan-30", 310.31
030, "Jan-31", 311.33
031, "Feb-01", 312.34
032, "Feb-02", 313.36
033, "Feb-03", 314.37
034, "Feb-04", 315.39
035, "Feb-05", 316.40
036, "Feb-06", 317.41
037, "Feb-07", 318.43
038, "Feb-08", 319.44
039, "Feb-09", 320.45
040, "Feb-10", 321.47
041, "Feb-11", 322.48
042, "Feb-12", 323.49
043, "Feb-13", 324.50
044, "Feb-14", 325.51
045, "Feb-15", 326.52
046, "Feb-16", 327.53
047, "Feb-17", 328.54
048, "Feb-18", 329.55
049, "Feb-19", 330.56
050, "Feb-20", 331.57
051, "Feb-21", 332.58
052, "Feb-22", 333.58
053, "Feb-23", 334.59
054, "Feb-24", 335.60
055, "Feb-25", 336.60
056, "Feb-26", 337.61
057, "Feb-27", 338.61
058, "Feb-28", 339.62
059, "Mar-01", 340.62
060, "Mar-02", 341.63
061, "Mar-03", 342.63
062, "Mar-04", 343.63
063, "Mar-05", 344.63
064, "Mar-06", 345.64
065, "Mar-07", 346.64
066, "Mar-08", 347.64
067, "Mar-09", 348.64
068, "Mar-10", 349.64
069, "Mar-11", 350.64
070, "Mar-12", 351.64
071, "Mar-13", 352.63
072, "Mar-14", 353.63
073, "Mar-15", 354.63
074, "Mar-16", 355.62
075, "Mar-17", 356.62
076, "Mar-18", 357.62
077, "Mar-19", 358.61
078, "Mar-20", 359.60
079, "Mar-21",   0.60
080, "Mar-22",   1.59
081, "Mar-23",   2.58
082, "Mar-24",   3.58
083, "Mar-25",   4.57
084, "Mar-26",   5.56
085, "Mar-27",   6.55
086, "Mar-28",   7.54
087, "Mar-29",   8.53
088, "Mar-30",   9.51
089, "Mar-31",  10.50
090, "Apr-01",  11.49
091, "Apr-02",  12.48
092, "Apr-03",  13.46
093, "Apr-04",  14.45
094, "Apr-05",  15.43
095, "Apr-06",  16.42
096, "Apr-07",  17.40
097, "Apr-08",  18.39
098, "Apr-09",  19.37
099, "Apr-10",  20.35
100, "Apr-11",  21.33
101, "Apr-12",  22.31
102, "Apr-13",  23.29
103, "Apr-14",  24.27
104, "Apr-15",  25.25
105, "Apr-16",  26.23
106, "Apr-17",  27.21
107, "Apr-18",  28.19
108, "Apr-19",  29.17
109, "Apr-20",  30.14
110, "Apr-21",  31.12
111, "Apr-22",  32.10
112, "Apr-23",  33.07
113, "Apr-24",  34.05
114, "Apr-25",  35.02
115, "Apr-26",  35.99
116, "Apr-27",  36.97
117, "Apr-28",  37.94
118, "Apr-29",  38.91
119, "Apr-30",  39.88
120, "May-01",  40.85
121, "May-02",  41.82
122, "May-03",  42.79
123, "May-04",  43.76
124, "May-05",  44.73
125, "May-06",  45.70
126, "May-07",  46.67
127, "May-08",  47.64
128, "May-09",  48.61
129, "May-10",  49.57
130, "May-11",  50.54
131, "May-12",  51.50
132, "May-13",  52.47
133, "May-14",  53.44
134, "May-15",  54.40
135, "May-16",  55.36
136, "May-17",  56.33
137, "May-18",  57.29
138, "May-19",  58.25
139, "May-20",  59.22
140, "May-21",  60.18
141, "May-22",  61.14
142, "May-23",  62.10
143, "May-24",  63.06
144, "May-25",  64.03
145, "May-26",  64.99
146, "May-27",  65.95
147, "May-28",  66.91
148, "May-29",  67.87
149, "May-30",  68.82
150, "May-31",  69.78
151, "Jun-01",  70.74
152, "Jun-02",  71.70
153, "Jun-03",  72.66
154, "Jun-04",  73.62
155, "Jun-05",  74.57
156, "Jun-06",  75.53
157, "Jun-07",  76.49
158, "Jun-08",  77.45
159, "Jun-09",  78.40
160, "Jun-10",  79.36
161, "Jun-11",  80.31
162, "Jun-12",  81.27
163, "Jun-13",  82.23
164, "Jun-14",  83.18
165, "Jun-15",  84.14
166, "Jun-16",  85.09
167, "Jun-17",  86.05
168, "Jun-18",  87.00
169, "Jun-19",  87.96
170, "Jun-20",  88.91
171, "Jun-21",  89.86
172, "Jun-22",  90.82
173, "Jun-23",  91.77
174, "Jun-24",  92.73
175, "Jun-25",  93.68
176, "Jun-26",  94.63
177, "Jun-27",  95.59
178, "Jun-28",  96.54
179, "Jun-29",  97.50
180, "Jun-30",  98.45
181, "Jul-01",  99.40
182, "Jul-02", 100.36
183, "Jul-03", 101.31
184, "Jul-04", 102.26
185, "Jul-05", 103.22
186, "Jul-06", 104.17
187, "Jul-07", 105.12
188, "Jul-08", 106.08
189, "Jul-09", 107.03
190, "Jul-10", 107.98
191, "Jul-11", 108.94
192, "Jul-12", 109.89
193, "Jul-13", 110.84
194, "Jul-14", 111.80
195, "Jul-15", 112.75
196, "Jul-16", 113.71
197, "Jul-17", 114.66
198, "Jul-18", 115.61
199, "Jul-19", 116.57
200, "Jul-20", 117.52
201, "Jul-21", 118.48
202, "Jul-22", 119.43
203, "Jul-23", 120.39
204, "Jul-24", 121.34
205, "Jul-25", 122.30
206, "Jul-26", 123.25
207, "Jul-27", 124.21
208, "Jul-28", 125.16
209, "Jul-29", 126.12
210, "Jul-30", 127.07
211, "Jul-31", 128.03
212, "Aug-01", 128.99
213, "Aug-02", 129.94
214, "Aug-03", 130.90
215, "Aug-04", 131.86
216, "Aug-05", 132.81
217, "Aug-06", 133.77
218, "Aug-07", 134.73
219, "Aug-08", 135.69
220, "Aug-09", 136.65
221, "Aug-10", 137.61
222, "Aug-11", 138.57
223, "Aug-12", 139.52
224, "Aug-13", 140.48
225, "Aug-14", 141.44
226, "Aug-15", 142.41
227, "Aug-16", 143.37
228, "Aug-17", 144.33
229, "Aug-18", 145.29
230, "Aug-19", 146.25
231, "Aug-20", 147.21
232, "Aug-21", 148.18
233, "Aug-22", 149.14
234, "Aug-23", 150.10
235, "Aug-24", 151.07
236, "Aug-25", 152.03
237, "Aug-26", 152.99
238, "Aug-27", 153.96
239, "Aug-28", 154.93
240, "Aug-29", 155.89
241, "Aug-30", 156.86
242, "Aug-31", 157.82
243, "Sep-01", 158.79
244, "Sep-02", 159.76
245, "Sep-03", 160.73
246, "Sep-04", 161.70
247, "Sep-05", 162.67
248, "Sep-06", 163.63
249, "Sep-07", 164.60
250, "Sep-08", 165.58
251, "Sep-09", 166.55
252, "Sep-10", 167.52
253, "Sep-11", 168.49
254, "Sep-12", 169.46
255, "Sep-13", 170.44
256, "Sep-14", 171.41
257, "Sep-15", 172.38
258, "Sep-16", 173.36
259, "Sep-17", 174.33
260, "Sep-18", 175.31
261, "Sep-19", 176.28
262, "Sep-20", 177.26
263, "Sep-21", 178.24
264, "Sep-22", 179.22
265, "Sep-23", 180.19
266, "Sep-24", 181.17
267, "Sep-25", 182.15
268, "Sep-26", 183.13
269, "Sep-27", 184.11
270, "Sep-28", 185.09
271, "Sep-29", 186.08
272, "Sep-30", 187.06
273, "Oct-01", 188.04
274, "Oct-02", 189.02
275, "Oct-03", 190.01
276, "Oct-04", 190.99
277, "Oct-05", 191.98
278, "Oct-06", 192.96
279, "Oct-07", 193.95
280, "Oct-08", 194.94
281, "Oct-09", 195.92
282, "Oct-10", 196.91
283, "Oct-11", 197.90
284, "Oct-12", 198.89
285, "Oct-13", 199.88
286, "Oct-14", 200.87
287, "Oct-15", 201.86
288, "Oct-16", 202.85
289, "Oct-17", 203.84
290, "Oct-18", 204.83
291, "Oct-19", 205.83
292, "Oct-20", 206.82
293, "Oct-21", 207.81
294, "Oct-22", 208.81
295, "Oct-23", 209.80
296, "Oct-24", 210.80
297, "Oct-25", 211.80
298, "Oct-26", 212.79
299, "Oct-27", 213.79
300, "Oct-28", 214.79
301, "Oct-29", 215.79
302, "Oct-30", 216.79
303, "Oct-31", 217.79
304, "Nov-01", 218.79
305, "Nov-02", 219.79
306, "Nov-03", 220.79
307, "Nov-04", 221.79
308, "Nov-05", 222.79
309, "Nov-06", 223.79
310, "Nov-07", 224.80
311, "Nov-08", 225.80
312, "Nov-09", 226.80
313, "Nov-10", 227.81
314, "Nov-11", 228.81
315, "Nov-12", 229.82
316, "Nov-13", 230.83
317, "Nov-14", 231.83
318, "Nov-15", 232.84
319, "Nov-16", 233.85
320, "Nov-17", 234.85
321, "Nov-18", 235.86
322, "Nov-19", 236.87
323, "Nov-20", 237.88
324, "Nov-21", 238.89
325, "Nov-22", 239.90
326, "Nov-23", 240.91
327, "Nov-24", 241.92
328, "Nov-25", 242.93
329, "Nov-26", 243.94
330, "Nov-27", 244.96
331, "Nov-28", 245.97
332, "Nov-29", 246.98
333, "Nov-30", 247.99
334, "Dec-01", 249.01
335, "Dec-02", 250.02
336, "Dec-03", 251.03
337, "Dec-04", 252.05
338, "Dec-05", 253.06
339, "Dec-06", 254.08
340, "Dec-07", 255.09
341, "Dec-08", 256.11
342, "Dec-09", 257.12
343, "Dec-10", 258.14
344, "Dec-11", 259.16
345, "Dec-12", 260.17
346, "Dec-13", 261.19
347, "Dec-14", 262.21
348, "Dec-15", 263.22
349, "Dec-16", 264.24
350, "Dec-17", 265.26
351, "Dec-18", 266.28
352, "Dec-19", 267.29
353, "Dec-20", 268.31
354, "Dec-21", 269.33
355, "Dec-22", 270.35
356, "Dec-23", 271.37
357, "Dec-24", 272.39
358, "Dec-25", 273.40
359, "Dec-26", 274.42
360, "Dec-27", 275.44
361, "Dec-28", 276.46
362, "Dec-29", 277.48
363, "Dec-30", 278.50
364, "Dec-31", 279.52
365, "Jan-01", 280.54
366, "Jan-02", 281.56

That @interact decorator before the main function isn't standard Python, it's a feature of Sage. You can play with an interactive version of this script on a SageMath server here.

> **Comments:**
> **username_3**: FWIW, I checked the equinox & solstice days against [this online calculator](http://romseyaustralia.com/equinox.html) for 2000, 2010, 2015, 2020 & 2030, and they seem pretty good.  

---

### Answer by username_4 on 2020-12-05. Score: 4

What you need is the Sun's [ecliptic longitude](https://en.wikipedia.org/wiki/Ecliptic_coordinate_system) for a given date.
As you expect, it increases faster near perihelion (1.02°/day in early January) and slower near aphelion (0.95°/day in early July).
It is exactly 0° at the March equinox, 90° at the June solstice, 180° at the September equinox, and 270° at the December solstice.

[Wikipedia:Position of the Sun](https://en.wikipedia.org/wiki/Position_of_the_Sun#Ecliptic_coordinates) gives an approximation, taken from the Astronomical Almanac, for the Sun's ecliptic longitude as a function of the date:
$$\begin{align}
n &= \text{JD} - 2451545.0 \\
L &= 280.460^\circ + 0.9856474^\circ n \\
g &= 357.528^\circ + 0.9856003^\circ n \\
\lambda &\approx L + 1.915^\circ \sin g + 0.020^\circ \sin 2g
\end{align}$$
*n* is the number of days since 2000-01-01 12:00 TT; 2021-01-01 00:00 is JD 2459215.5.
  
*L* is the Sun's mean longitude relative to the March equinox as if the Earth's motion were circular at a constant speed.
  
*g* is the Earth's mean anomaly relative to perihelion.
  
*λ* is the Sun's longitude; the 1.9° coefficient of the second term is related to the 2-day misalignment you described.

The spreadsheet [NOAA\_Solar\_Calculations\_year](https://www.esrl.noaa.gov/gmd/grad/solcalc/calcdetails.html) implements a more sophisticated formula from Meeus [Astronomical Algorithms](https://www.goodreads.com/book/show/425217.Astronomical_Algorithms) chapter 25.
If you set appropriate values in cells B2..B6, column P gives the Sun's longitude on the date in column D.

You can also request an ephemeris from [JPL HORIZONS](https://ssd.jpl.nasa.gov/horizons.cgi) with these settings:
  
Target Body: Sun [Sol] [10]
  
Observer Location: Geocentric [50]
  
Time Span: your calendar year
  
Table Settings: QUANTITIES=31 (Observer ecliptic lon. & lat.)

> **Comments:**
> **username_5**: Does this mean OP could make an elliptical shaped calendar which would line up with cardinal points for the solstices and equinox?  
> **username_4**: @username_5 Those points would line up whether the distance from center to edge were constant or not.  

---

### Answer by username_6 on 2020-12-05. Score: 3

The fact that equinox and solstice dates don’t line up with the quadrants of the circle is due to the ellipticity and eccentricity of Earth’s orbit around the Sun.

Let’s go back in history a little. Ancient Greeks thought all celestial movements were circular. This model was followed for approximately 2,000 years until Copernicus finally realized the Earth is a planet and Kepler realized all planets orbit the Sun on elliptical, not circular, paths.

The astrolabe, an instrument invented by the Greeks and perfected by the Arabs and Muslims (and please, no discussion about this here; it’s not the place for that) and used until the late Renaissance, follows this “circles-only-and-Earth-in-the-middle” model.

One possible back for the astrolabe (there are many variations—I know; I’m an astrolabist) includes a circular ecliptic and a circular calendar. Either the calendar’s graduations are unevenly spaced, or they are evenly spaced but the calendar is offset from the centre of the ecliptic “circle.”

The offset is calculated by $2er$, where $e$ is the eccentricity of Earth’s orbit and $r$ is the radius of the calendar. The direction of the offset is $\pi\ +\ 180°$, where $\pi$ is the longitude of the perihelion of Earth’s orbit.

More details can be found in the books *The Astrolabe* by James Morrison and *The History and Practice of Ancient Astronomy* by James Evans.


---

### Answer by username_2 on 2020-12-05. Score: 2

By looking at https://en.wikipedia.org/wiki/Solstice, we find the dates for equinox and solstice in 2021 as March 20, June 21, Sep 22, and Dec 21.
These correspond to days 79,172,265,355.
That gives us differences of 89, 93, 93,and 90 days. Points need to be 90/89 degrees apart in the first quadrant, 90/93 degrees apart in the second quadrant, etc... Care needs to be taken at the quadrant transitions. I used matlab to get the degrees for each quadrant and then rotate the whole batch by 11 to start on Jan 1.
q89 = 0:90/89:89; q90 = 0:1:89; q93 = [0:90/93:89 , 89]; spacing = [q89 q93+90 q93+180 q90+270]; spacing = [spacing(12:365) spacing(1:11)]';
This code probably isn't too useful if you don't have matlab, so here are the 365 values in degrees clockwise from North starting with Jan 1.  Note that the solstice/equinox days of the year: 79, 172, 265, 355 have values of exactly 90, 180, 270, and 0 degrees, fixing them to the cardinal points on the circle.
1   11.12
2   12.13
3   13.15
4   14.16
5   15.17
6   16.18
7   17.19
8   18.2
9   19.21
10  20.22
11  21.24
12  22.25
13  23.26
14  24.27
15  25.28
16  26.29
17  27.3
18  28.31
19  29.33
20  30.34
21  31.35
22  32.36
23  33.37
24  34.38
25  35.39
26  36.4
27  37.42
28  38.43
29  39.44
30  40.45
31  41.46
32  42.47
33  43.48
34  44.49
35  45.51
36  46.52
37  47.53
38  48.54
39  49.55
40  50.56
41  51.57
42  52.58
43  53.6
44  54.61
45  55.62
46  56.63
47  57.64
48  58.65
49  59.66
50  60.67
51  61.69
52  62.7
53  63.71
54  64.72
55  65.73
56  66.74
57  67.75
58  68.76
59  69.78
60  70.79
61  71.8
62  72.81
63  73.82
64  74.83
65  75.84
66  76.85
67  77.87
68  78.88
69  79.89
70  80.9
71  81.91
72  82.92
73  83.93
74  84.94
75  85.96
76  86.97
77  87.98
78  88.99
79  90
80  90.97
81  91.94
82  92.9
83  93.87
84  94.84
85  95.81
86  96.77
87  97.74
88  98.71
89  99.68
90  100.65
91  101.61
92  102.58
93  103.55
94  104.52
95  105.48
96  106.45
97  107.42
98  108.39
99  109.35
100 110.32
101 111.29
102 112.26
103 113.23
104 114.19
105 115.16
106 116.13
107 117.1
108 118.06
109 119.03
110 120
111 120.97
112 121.94
113 122.9
114 123.87
115 124.84
116 125.81
117 126.77
118 127.74
119 128.71
120 129.68
121 130.65
122 131.61
123 132.58
124 133.55
125 134.52
126 135.48
127 136.45
128 137.42
129 138.39
130 139.35
131 140.32
132 141.29
133 142.26
134 143.23
135 144.19
136 145.16
137 146.13
138 147.1
139 148.06
140 149.03
141 150
142 150.97
143 151.94
144 152.9
145 153.87
146 154.84
147 155.81
148 156.77
149 157.74
150 158.71
151 159.68
152 160.65
153 161.61
154 162.58
155 163.55
156 164.52
157 165.48
158 166.45
159 167.42
160 168.39
161 169.35
162 170.32
163 171.29
164 172.26
165 173.23
166 174.19
167 175.16
168 176.13
169 177.1
170 178.06
171 179
172 180
173 180.97
174 181.94
175 182.9
176 183.87
177 184.84
178 185.81
179 186.77
180 187.74
181 188.71
182 189.68
183 190.65
184 191.61
185 192.58
186 193.55
187 194.52
188 195.48
189 196.45
190 197.42
191 198.39
192 199.35
193 200.32
194 201.29
195 202.26
196 203.23
197 204.19
198 205.16
199 206.13
200 207.1
201 208.06
202 209.03
203 210
204 210.97
205 211.94
206 212.9
207 213.87
208 214.84
209 215.81
210 216.77
211 217.74
212 218.71
213 219.68
214 220.65
215 221.61
216 222.58
217 223.55
218 224.52
219 225.48
220 226.45
221 227.42
222 228.39
223 229.35
224 230.32
225 231.29
226 232.26
227 233.23
228 234.19
229 235.16
230 236.13
231 237.1
232 238.06
233 239.03
234 240
235 240.97
236 241.94
237 242.9
238 243.87
239 244.84
240 245.81
241 246.77
242 247.74
243 248.71
244 249.68
245 250.65
246 251.61
247 252.58
248 253.55
249 254.52
250 255.48
251 256.45
252 257.42
253 258.39
254 259.35
255 260.32
256 261.29
257 262.26
258 263.23
259 264.19
260 265.16
261 266.13
262 267.1
263 268.06
264 269
265 270
266 271
267 272
268 273
269 274
270 275
271 276
272 277
273 278
274 279
275 280
276 281
277 282
278 283
279 284
280 285
281 286
282 287
283 288
284 289
285 290
286 291
287 292
288 293
289 294
290 295
291 296
292 297
293 298
294 299
295 300
296 301
297 302
298 303
299 304
300 305
301 306
302 307
303 308
304 309
305 310
306 311
307 312
308 313
309 314
310 315
311 316
312 317
313 318
314 319
315 320
316 321
317 322
318 323
319 324
320 325
321 326
322 327
323 328
324 329
325 330
326 331
327 332
328 333
329 334
330 335
331 336
332 337
333 338
334 339
335 340
336 341
337 342
338 343
339 344
340 345
341 346
342 347
343 348
344 349
345 350
346 351
347 352
348 353
349 354
350 355
351 356
352 357
353 358
354 359
355 0
356 1.01
357 2.02
358 3.03
359 4.04
360 5.06
361 6.07
362 7.08
363 8.09
364 9.1
365 10.11


---

