As Mike G 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 Mike G 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 PM 2Ring 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.