Наблюдая за улучшением погоды в своей местности внезапно задался мыслью о том, что неплохо было бы знать время восхода и заката Солнца. Сказано - сделано. Алгоритм расчета нашелся здесь. Источник алгоритма - Almanac for Computers, 1990, published by Nautical Almanac Office, United States Naval Observatory, Washington, DC 20392
В комментариях к алгоритму также было указано, что он верен для периода с 1980 по 2050 год, и обладает точностью до одной минуты. Точность, впрочем, уменьшается для мест, лежащих на широтах выше 60 градусов северной или южной широты. Выше 80 градусов погрешности в расчете солнечной эклиптики (так, кажется) приводят к еще большим ошибкам (каким - не сказано).
Также для высоких широт зимой и летом солнце может либо никогда не заходить (полярный день) либо никогда не восходить (полярная ночь). В этом случае в результатах указывается продолжительность дня 24 часа либо 00 часов соответственно.
Надо еще рассказать про зенитный угол (zenith angle), который задается параметром "Граница дня/ночи" и оказывает существенное влияние на расчет. Зенит - это линия направленная из точки на поверхности земли вертикально вверх, а зенитный угол (я не уверен в термине, это калька с английского) - это угол между вертикалью и направлением на центр небесного объекта. В данном случае речь идет о том, какой величины должен быть этот угол, чтобы считать что солнце уже "совсем" взошло или уже село и день сменился ночью или наоборот.
Если бы Солнце было точкой, а Земля не имела атмосферы, то зенитный угол, определяющий полный закат солнца, был бы равен 90 градусам. Но поскольку Солнце не точка, и имеет угловой диаметр, а его свет отражается твердыми частицами в атмосфере, то для того, чтобы верхний край солнечного диска скрылся за горизонтом, его центр должен лежать уже чуть ниже горизонта. При нормальных атмосферных условиях это соответствует углу в 90 градусов 50 минут. Этот угол считается углом "официального" заката солнца.
Источник: planetcalc.com