Хотя солнце и скрылось за горизонтом, за счет отражения его света от атмосферы все еще довольно светло. Начинается период времени, называемый сумерками. Сумерки делятся на три этапа, и конец каждого из этапов тоже можно взять за точку заката солнца.
Первый этап называется гражданскими сумерками. Это время, когда еще достаточно светло, чтобы работать вне помещения без искусственного освещения. Концу гражданских сумерек соответствует зенитный угол в 96 градусов, после чего начинаются навигационные сумерки.
Навигационные сумерки - это время, когда на воде все еще заметна линия горизонта. Концу навигационных сумерек соответствует зенитный угол в 102 градуса, после чего начинаются астрономические сумерки.
Астрономические сумерки - это время, когда Солнце все еще является источником света и мешает видимости самых слабых звезд. Для обычного наблюдателя это время неотличимо от ночи. Концу астрономических сумерек соответствует момент, когда Солнце полностью прекращает быть источником света, и это зенитный угол в 108 градусов.
Впрочем, как оказалось, реализация алгоритма это еще не все. Дело в том, что алгоритм выдает результат в гринвичском времени. Очевидно, что для большего удобства пользователя надо перевести это время в местное. В идеальном мире часовой пояс можно было бы получить, используя значение долготы места. В самом деле, земной сфероид делится на 24 сферических двуугольника, по меридианам, отстоящим друг от друга на 15 градусов, и часовой пояс вычисляется тривиально.
Но в реальном мире все не так - политические, административные и географические границы придали весьма забавную формучасовым поясам, так что от определения пояса по долготе пришлось отказаться. Вместо этого я добавил в калькулятор дополнительное поле для задания смещения от гринвичского времени.
Тут пришла в голову мысль - почему бы не объединить этот алгоритм со справочником Информация о городах, который используется для калькулятора Расстояние между двумя городами и не сделать еще один калькулятор - расчет времени восхода и заката солнца в городах, с использованием данных из справочника. Координаты городов в нем есть, часовые пояса теперь тоже есть - выбираешь дату и город и получаешь местное время восхода и заката без лишних хлопот.
Правда, надо еще было понять, какое сейчас местное время - зимнее или летнее. Дело в том, что в тех странах, которые используют зимнее и летнее время, смена времени осуществляется по разному. Например, в Новой Зеландии летнее время действует с 30 апреля до последнего воскресенья сентября, а в Ираке - с первой пятницы апреля до последней пятницы октября. В-общем, на такие подробности меня уже не хватило и я немного упростил, использовав правило перехода на зимнее/летнее время принятое в Европе и в России - с последнего воскресенья марта по последнее воскресенье октября.
Так что для некоторых городов (ну например, для городов Новой Зеландии) местное время в калькуляторе может вычисляться неправильно для марта-апреля и сентября-октября. Но, к слову сказать, далеко не все страны используют зимнее/летнее время. Например, в районе экватора оно совсем и не нужно, так как сезонных изменений в солнечном свете практически не наблюдается. Да и вообще, многим странам такое деление навязывалось искусственно, в бытность их колониями, или, как в случае с Японией, под американской оккупацией (1948-1951). Некоторые страны, как говорится, пробовали, но им не понравилось. На территории бывшего СССР от разного времени уже отказались страны Центральной Азии и Грузия. Мол, люди напрягаются, а экономического эффекта не видно.
Вообще придумали зимнее/летнее время, как я и подозревал, англичане. В 1907 году предложил его некий Вильям Виллет (William Willett).
Англичане вообще славятся придумыванием всяких забавных штук вроде имперской системы мер или нестандартных размеров обуви, так что ничего удивительного. Но многие страны Европы им последовали в годы Первой Мировой Войны, чтобы экономить что? Неправильно, совсем не электричество - а уголь. Первыми были практичные немцы и их союзники (30 апреля 1916 года), ну а потом подтянулась Великобритания с союзниками и затем нейтральные страны.
Источник: planetcalc.com