annotate lisp/calendar/solar.el @ 93232:32f5a7f03231

Some re-ordering so that defcustoms are at start, functions defined before use.
author Glenn Morris <rgm@gnu.org>
date Wed, 26 Mar 2008 03:26:43 +0000
parents 21dd50e483d6
children 2fd8322cee67
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 20462
diff changeset
1 ;;; solar.el --- calendar functions for solar events
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2
68721
8daf7d9a0771 Add 2006 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 67465
diff changeset
3 ;; Copyright (C) 1992, 1993, 1995, 1997, 2001, 2002, 2003, 2004, 2005,
79703
974a828870fe Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78216
diff changeset
4 ;; 2006, 2007, 2008 Free Software Foundation, Inc.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
7 ;; Denis B. Roegel <Denis.Roegel@loria.fr>
65919
5c09efcfc1d9 Update maintainer email address.
Glenn Morris <rgm@gnu.org>
parents: 65145
diff changeset
8 ;; Maintainer: Glenn Morris <rgm@gnu.org>
2249
94fc2ce49c55 Corrected Keywords header
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2248
diff changeset
9 ;; Keywords: calendar
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
10 ;; Human-Keywords: sunrise, sunset, equinox, solstice, calendar, diary, holidays
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 ;; This file is part of GNU Emacs.
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13
6736
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
14 ;; GNU Emacs is free software; you can redistribute it and/or modify
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
15 ;; it under the terms of the GNU General Public License as published by
78216
93e11478c954 Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 77279
diff changeset
16 ;; the Free Software Foundation; either version 3, or (at your option)
6736
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
17 ;; any later version.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18
6736
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
19 ;; GNU Emacs is distributed in the hope that it will be useful,
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
22 ;; GNU General Public License for more details.
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
23
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
24 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13874
diff changeset
25 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64085
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 62402
diff changeset
26 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 62402
diff changeset
27 ;; Boston, MA 02110-1301, USA.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 ;;; Commentary:
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
31 ;; This collection of functions implements the features of calendar.el,
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
32 ;; diary.el, and holiday.el that deal with times of day, sunrise/sunset, and
13742
6896ecdd9378 Fix misspelling in comment.
Paul Eggert <eggert@twinsun.com>
parents: 13668
diff changeset
33 ;; equinoxes/solstices.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 ;; Based on the ``Almanac for Computers 1984,'' prepared by the Nautical
13045
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
36 ;; Almanac Office, United States Naval Observatory, Washington, 1984, on
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
37 ;; ``Astronomical Formulae for Calculators,'' 3rd ed., by Jean Meeus,
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
38 ;; Willmann-Bell, Inc., 1985, on ``Astronomical Algorithms'' by Jean Meeus,
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
39 ;; Willmann-Bell, Inc., 1991, and on ``Planetary Programs and Tables from
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
40 ;; -4000 to +2800'' by Pierre Bretagnon and Jean-Louis Simon, Willmann-Bell,
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
41 ;; Inc., 1986.
13045
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
42
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 ;;
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
44 ;; Accuracy:
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
45 ;; 1. Sunrise/sunset times will be accurate to the minute for years
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
46 ;; 1951--2050. For other years the times will be within +/- 2 minutes.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 ;;
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
48 ;; 2. Equinox/solstice times will be accurate to the minute for years
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
49 ;; 1951--2050. For other years the times will be within +/- 1 minute.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50
20462
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 19898
diff changeset
51 ;; Technical details of all the calendrical calculations can be found in
61148
7f7db25577d9 Update reference to "Calendrical Calculations" book; there's a new edition.
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
52 ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
7f7db25577d9 Update reference to "Calendrical Calculations" book; there's a new edition.
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
53 ;; and Nachum Dershowitz, Cambridge University Press (2001).
20462
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 19898
diff changeset
54
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 ;;; Code:
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56
93230
21dd50e483d6 Remove floating-point check.
Glenn Morris <rgm@gnu.org>
parents: 93093
diff changeset
57 (require 'calendar)
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
58 (require 'cal-dst)
93230
21dd50e483d6 Remove floating-point check.
Glenn Morris <rgm@gnu.org>
parents: 93093
diff changeset
59 ;; calendar-absolute-from-astro and v versa are cal-autoloads.
21dd50e483d6 Remove floating-point check.
Glenn Morris <rgm@gnu.org>
parents: 93093
diff changeset
60 ;;;(require 'cal-julian)
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
61
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
62
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
63 (defcustom calendar-time-display-form
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
64 '(12-hours ":" minutes am-pm
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
65 (if time-zone " (") time-zone (if time-zone ")"))
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
66 "The pseudo-pattern that governs the way a time of day is formatted.
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
67
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
68 A pseudo-pattern is a list of expressions that can involve the keywords
47252
0fcc52168240 (calendar-time-display-form): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents: 46617
diff changeset
69 `12-hours', `24-hours', and `minutes', all numbers in string form,
0fcc52168240 (calendar-time-display-form): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents: 46617
diff changeset
70 and `am-pm' and `time-zone', both alphabetic strings.
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
71
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
72 For example, the form
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
73
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
74 '(24-hours \":\" minutes
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
75 (if time-zone \" (\") time-zone (if time-zone \")\"))
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
76
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
77 would give military-style times like `21:07 (UTC)'."
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
78 :type 'sexp
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
79 :group 'calendar)
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
80
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
81 (defcustom calendar-latitude nil
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
82 "Latitude of `calendar-location-name' in degrees.
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
83 The value can be either a decimal fraction (one place of accuracy is
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
84 sufficient), + north, - south, such as 40.7 for New York City, or the value
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
85 can be a vector [degrees minutes north/south] such as [40 50 north] for New
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
86 York City.
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
87
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
88 This variable should be set in `site-start'.el."
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
89 :type '(choice (const nil)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
90 (number :tag "Exact")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
91 (vector :value [0 0 north]
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
92 (integer :tag "Degrees")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
93 (integer :tag "Minutes")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
94 (choice :tag "Position"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
95 (const north)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
96 (const south))))
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
97 :group 'calendar)
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
98
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
99 (defcustom calendar-longitude nil
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
100 "Longitude of `calendar-location-name' in degrees.
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
101 The value can be either a decimal fraction (one place of accuracy is
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
102 sufficient), + east, - west, such as -73.9 for New York City, or the value
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
103 can be a vector [degrees minutes east/west] such as [73 55 west] for New
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
104 York City.
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
105
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
106 This variable should be set in `site-start'.el."
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
107 :type '(choice (const nil)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
108 (number :tag "Exact")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
109 (vector :value [0 0 west]
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
110 (integer :tag "Degrees")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
111 (integer :tag "Minutes")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
112 (choice :tag "Position"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
113 (const east)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
114 (const west))))
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
115 :group 'calendar)
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
116
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
117 (defcustom calendar-location-name
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
118 '(let ((float-output-format "%.1f"))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
119 (format "%s%s, %s%s"
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
120 (if (numberp calendar-latitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
121 (abs calendar-latitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
122 (+ (aref calendar-latitude 0)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
123 (/ (aref calendar-latitude 1) 60.0)))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
124 (if (numberp calendar-latitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
125 (if (> calendar-latitude 0) "N" "S")
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
126 (if (eq (aref calendar-latitude 2) 'north) "N" "S"))
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
127 (if (numberp calendar-longitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
128 (abs calendar-longitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
129 (+ (aref calendar-longitude 0)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
130 (/ (aref calendar-longitude 1) 60.0)))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
131 (if (numberp calendar-longitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
132 (if (> calendar-longitude 0) "E" "W")
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
133 (if (eq (aref calendar-longitude 2) 'east) "E" "W"))))
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
134 "Expression evaluating to the name of the calendar location.
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
135 For example, \"New York City\". The default value is just the
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
136 variable `calendar-latitude' paired with the variable `calendar-longitude'.
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
137
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
138 This variable should be set in `site-start'.el."
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
139 :type 'sexp
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
140 :group 'calendar)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
141
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
142 (defcustom solar-error 0.5
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
143 "Tolerance (in minutes) for sunrise/sunset calculations.
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
144
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
145 A larger value makes the calculations for sunrise/sunset faster, but less
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
146 accurate. The default is half a minute (30 seconds), so that sunrise/sunset
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
147 times will be correct to the minute.
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
148
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
149 It is useless to set the value smaller than 4*delta, where delta is the
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
150 accuracy in the longitude of the sun (given by the function
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
151 `solar-ecliptic-coordinates') in degrees since (delta/360) x (86400/60) = 4 x
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
152 delta. At present, delta = 0.01 degrees, so the value of the variable
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
153 `solar-error' should be at least 0.04 minutes (about 2.5 seconds)."
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
154 :type 'number
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
155 :group 'calendar)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
156
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
157 (defcustom diary-sabbath-candles-minutes 18
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
158 "Number of minutes before sunset for sabbath candle lighting."
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
159 :group 'diary
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
160 :type 'integer
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
161 :version "21.1")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
162
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
163
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
164 ;;; End of user options.
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
165
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
166
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
167 (defconst solar-n-hemi-seasons
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
168 '("Vernal Equinox" "Summer Solstice" "Autumnal Equinox" "Winter Solstice")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
169 "List of season changes for the northern hemisphere.")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
170
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
171 (defconst solar-s-hemi-seasons
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
172 '("Autumnal Equinox" "Winter Solstice" "Vernal Equinox" "Summer Solstice")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
173 "List of season changes for the southern hemisphere.")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
174
92996
6dcaa1e995c4 Small formatting change.
Glenn Morris <rgm@gnu.org>
parents: 92958
diff changeset
175 (defvar solar-sidereal-time-greenwich-midnight nil
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
176 "Sidereal time at Greenwich at midnight (universal time).")
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
177
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
178 (defvar solar-northern-spring-or-summer-season nil
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
179 "Non-nil if northern spring or summer and nil otherwise.
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
180 Needed for polar areas, in order to know whether the day lasts 0 or 24 hours.")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
181
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
182
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
183 (defsubst calendar-latitude ()
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
184 "Ensure the variable `calendar-latitude' is a signed decimal fraction."
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
185 (if (numberp calendar-latitude)
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
186 calendar-latitude
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
187 (let ((lat (+ (aref calendar-latitude 0)
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
188 (/ (aref calendar-latitude 1) 60.0))))
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
189 (if (eq (aref calendar-latitude 2) 'north)
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
190 lat
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
191 (- lat)))))
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
192
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
193 (defsubst calendar-longitude ()
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
194 "Ensure the variable `calendar-longitude' is a signed decimal fraction."
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
195 (if (numberp calendar-longitude)
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
196 calendar-longitude
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
197 (let ((long (+ (aref calendar-longitude 0)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
198 (/ (aref calendar-longitude 1) 60.0))))
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
199 (if (eq (aref calendar-longitude 2) 'east)
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
200 long
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
201 (- long)))))
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
202
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
203 (defun solar-get-number (prompt)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
204 "Return a number from the minibuffer, prompting with PROMPT.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
205 Returns nil if nothing was entered."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
206 (let ((x (read-string prompt "")))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
207 (unless (string-equal x "")
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
208 (string-to-number x))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
209
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 (defun solar-setup ()
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
211 "Prompt for `calendar-longitude', `calendar-latitude', `calendar-time-zone'."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 (beep)
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
213 (or calendar-longitude
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 (setq calendar-longitude
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 (solar-get-number
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 "Enter longitude (decimal fraction; + east, - west): ")))
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
217 (or calendar-latitude
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 (setq calendar-latitude
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 (solar-get-number
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 "Enter latitude (decimal fraction; + north, - south): ")))
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
221 (or calendar-time-zone
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 (setq calendar-time-zone
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 (solar-get-number
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
224 "Enter difference from Coordinated Universal Time (in minutes): ")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
225 )))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
227 (defun solar-sin-degrees (x)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
228 "Return sin of X degrees."
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
229 (sin (degrees-to-radians (mod x 360.0))))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
230
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
231 (defun solar-cosine-degrees (x)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
232 "Return cosine of X degrees."
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
233 (cos (degrees-to-radians (mod x 360.0))))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
234
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
235 (defun solar-tangent-degrees (x)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
236 "Return tangent of X degrees."
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
237 (tan (degrees-to-radians (mod x 360.0))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
238
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 (defun solar-xy-to-quadrant (x y)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
240 "Determine the quadrant of the point X, Y."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 (if (> x 0)
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 (if (> y 0) 1 4)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
243 (if (> y 0) 2 3)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 (defun solar-degrees-to-quadrant (angle)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
246 "Determine the quadrant of ANGLE degrees."
4660
2516bc453477 Use integers instead of floating point where they will do.
Paul Eggert <eggert@twinsun.com>
parents: 4657
diff changeset
247 (1+ (floor (mod angle 360) 90)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 (defun solar-arctan (x quad)
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 "Arctangent of X in quadrant QUAD."
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 (let ((deg (radians-to-degrees (atan x))))
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
252 (cond ((= quad 2) (+ deg 180))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
253 ((= quad 3) (+ deg 180))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
254 ((= quad 4) (+ deg 360))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
255 (t deg))))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
257 (defun solar-atn2 (x y)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
258 "Arctangent of point X, Y."
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
259 (if (zerop x)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
260 (if (> y 0) 90 270)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
261 (solar-arctan (/ y x) (solar-xy-to-quadrant x y))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
262
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 (defun solar-arccos (x)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
264 "Arccosine of X."
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
265 (let ((y (sqrt (- 1 (* x x)))))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
266 (solar-atn2 x y)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 (defun solar-arcsin (y)
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
269 "Arcsin of Y."
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
270 (let ((x (sqrt (- 1 (* y y)))))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
271 (solar-atn2 x y)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
273 (defsubst solar-degrees-to-hours (degrees)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
274 "Convert DEGREES to hours."
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
275 (/ degrees 15.0))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
277 (defsubst solar-hours-to-days (hour)
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
278 "Convert HOUR to decimal fraction of a day."
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
279 (/ hour 24.0))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
281 (defun solar-right-ascension (longitude obliquity)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
282 "Right ascension of the sun, in hours, given LONGITUDE and OBLIQUITY.
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
283 Both arguments are in degrees."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 (solar-degrees-to-hours
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 (solar-arctan
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
286 (* (solar-cosine-degrees obliquity) (solar-tangent-degrees longitude))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 (solar-degrees-to-quadrant longitude))))
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
289 (defun solar-declination (longitude obliquity)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
290 "Declination of the sun, in degrees, given LONGITUDE and OBLIQUITY.
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
291 Both arguments are in degrees."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 (solar-arcsin
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
293 (* (solar-sin-degrees obliquity)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 (solar-sin-degrees longitude))))
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
296 (defun solar-ecliptic-coordinates (time sunrise-flag)
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
297 "Return solar longitude, ecliptic inclination, equation of time, nutation.
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
298 Values are for TIME in Julian centuries of Ephemeris Time since
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
299 January 1st, 2000, at 12 ET. Longitude and inclination are in
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
300 degrees, equation of time in hours, and nutation in seconds of longitude.
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
301 If SUNRISE-FLAG is non-nil, only calculate longitude and inclination."
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
302 (let* ((l (+ 280.46645
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
303 (* 36000.76983 time)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
304 (* 0.0003032 time time))) ; sun mean longitude
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
305 (ml (+ 218.3165
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
306 (* 481267.8813 time))) ; moon mean longitude
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
307 (m (+ 357.52910
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
308 (* 35999.05030 time)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
309 (* -0.0001559 time time)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
310 (* -0.00000048 time time time))) ; sun mean anomaly
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
311 (i (+ 23.43929111 (* -0.013004167 time)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
312 (* -0.00000016389 time time)
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
313 (* 0.0000005036 time time time))) ; mean inclination
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
314 (c (+ (* (+ 1.914600
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
315 (* -0.004817 time)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
316 (* -0.000014 time time))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
317 (solar-sin-degrees m))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
318 (* (+ 0.019993 (* -0.000101 time))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
319 (solar-sin-degrees (* 2 m)))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
320 (* 0.000290
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
321 (solar-sin-degrees (* 3 m))))) ; center equation
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
322 (L (+ l c)) ; total longitude
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
323 ;; Longitude of moon's ascending node on the ecliptic.
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
324 (omega (+ 125.04
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
325 (* -1934.136 time)))
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
326 ;; nut = nutation in longitude, measured in seconds of angle.
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
327 (nut (unless sunrise-flag
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
328 (+ (* -17.20 (solar-sin-degrees omega))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
329 (* -1.32 (solar-sin-degrees (* 2 l)))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
330 (* -0.23 (solar-sin-degrees (* 2 ml)))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
331 (* 0.21 (solar-sin-degrees (* 2 omega))))))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
332 (ecc (unless sunrise-flag ; eccentricity of earth's orbit
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
333 (+ 0.016708617
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
334 (* -0.000042037 time)
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
335 (* -0.0000001236 time time))))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
336 (app (+ L ; apparent longitude of sun
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
337 -0.00569
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
338 (* -0.00478
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
339 (solar-sin-degrees omega))))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
340 (y (unless sunrise-flag
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
341 (* (solar-tangent-degrees (/ i 2))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
342 (solar-tangent-degrees (/ i 2)))))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
343 ;; Equation of time, in hours.
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
344 (time-eq (unless sunrise-flag
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
345 (/ (* 12 (+ (* y (solar-sin-degrees (* 2 l)))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
346 (* -2 ecc (solar-sin-degrees m))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
347 (* 4 ecc y (solar-sin-degrees m)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
348 (solar-cosine-degrees (* 2 l)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
349 (* -0.5 y y (solar-sin-degrees (* 4 l)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
350 (* -1.25 ecc ecc (solar-sin-degrees (* 2 m)))))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
351 3.1415926535))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
352 (list app i time-eq nut)))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
353
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
354 (defun solar-ephemeris-correction (year)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
355 "Ephemeris time minus Universal Time during Gregorian YEAR.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
356 Result is in days. For the years 1800-1987, the maximum error is
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
357 1.9 seconds. For the other years, the maximum error is about 30 seconds."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
358 (cond ((and (<= 1988 year) (< year 2020))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
359 (/ (+ year -2000 67.0) 60.0 60.0 24.0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
360 ((and (<= 1900 year) (< year 1988))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
361 (let* ((theta (/ (- (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
362 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
363 (list 7 1 year)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
364 (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
365 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
366 '(1 1 1900))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
367 36525.0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
368 (theta2 (* theta theta))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
369 (theta3 (* theta2 theta))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
370 (theta4 (* theta2 theta2))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
371 (theta5 (* theta3 theta2)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
372 (+ -0.00002
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
373 (* 0.000297 theta)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
374 (* 0.025184 theta2)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
375 (* -0.181133 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
376 (* 0.553040 theta4)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
377 (* -0.861938 theta5)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
378 (* 0.677066 theta3 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
379 (* -0.212591 theta4 theta3))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
380 ((and (<= 1800 year) (< year 1900))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
381 (let* ((theta (/ (- (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
382 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
383 (list 7 1 year)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
384 (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
385 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
386 '(1 1 1900))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
387 36525.0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
388 (theta2 (* theta theta))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
389 (theta3 (* theta2 theta))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
390 (theta4 (* theta2 theta2))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
391 (theta5 (* theta3 theta2)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
392 (+ -0.000009
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
393 (* 0.003844 theta)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
394 (* 0.083563 theta2)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
395 (* 0.865736 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
396 (* 4.867575 theta4)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
397 (* 15.845535 theta5)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
398 (* 31.332267 theta3 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
399 (* 38.291999 theta4 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
400 (* 28.316289 theta4 theta4)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
401 (* 11.636204 theta4 theta5)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
402 (* 2.043794 theta5 theta5))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
403 ((and (<= 1620 year) (< year 1800))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
404 (let ((x (/ (- year 1600) 10.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
405 (/ (+ (* 2.19167 x x) (* -40.675 x) 196.58333) 60.0 60.0 24.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
406 (t (let* ((tmp (- (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
407 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
408 (list 1 1 year)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
409 2382148))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
410 (second (- (/ (* tmp tmp) 41048480.0) 15)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
411 (/ second 60.0 60.0 24.0)))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
412
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
413 (defun solar-ephemeris-time (time)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
414 "Ephemeris Time at moment TIME.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
415 TIME is a pair with the first component being the number of Julian centuries
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
416 elapsed at 0 Universal Time, and the second component being the universal
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
417 time. For instance, the pair corresponding to November 28, 1995 at 16 UT is
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
418 \(-0.040945 16), -0.040945 being the number of Julian centuries elapsed between
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
419 Jan 1, 2000 at 12 UT and November 28, 1995 at 0 UT.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
420
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
421 Result is in Julian centuries of ephemeris time."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
422 (let* ((t0 (car time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
423 (ut (cadr time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
424 (t1 (+ t0 (/ (/ ut 24.0) 36525)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
425 (y (+ 2000 (* 100 t1)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
426 (dt (* 86400 (solar-ephemeris-correction (floor y)))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
427 (+ t1 (/ (/ dt 86400) 36525))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
428
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
429 (defun solar-equatorial-coordinates (time sunrise-flag)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
430 "Right ascension (in hours) and declination (in degrees) of the sun at TIME.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
431 TIME is a pair with the first component being the number of
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
432 Julian centuries elapsed at 0 Universal Time, and the second
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
433 component being the universal time. For instance, the pair
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
434 corresponding to November 28, 1995 at 16 UT is (-0.040945 16),
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
435 -0.040945 being the number of Julian centuries elapsed between
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
436 Jan 1, 2000 at 12 UT and November 28, 1995 at 0 UT. SUNRISE-FLAG is passed
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
437 to `solar-ecliptic-coordinates'."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
438 (let ((ec (solar-ecliptic-coordinates (solar-ephemeris-time time)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
439 sunrise-flag)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
440 (list (solar-right-ascension (car ec) (cadr ec))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
441 (solar-declination (car ec) (cadr ec)))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
442
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
443 (defun solar-horizontal-coordinates (time latitude longitude sunrise-flag)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
444 "Azimuth and height of the sun at TIME, LATITUDE, and LONGITUDE.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
445 TIME is a pair with the first component being the number of
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
446 Julian centuries elapsed at 0 Universal Time, and the second
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
447 component being the universal time. For instance, the pair
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
448 corresponding to November 28, 1995 at 16 UT is (-0.040945 16),
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
449 -0.040945 being the number of Julian centuries elapsed between
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
450 Jan 1, 2000 at 12 UT and November 28, 1995 at 0 UT. SUNRISE-FLAG
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
451 is passed to `solar-ecliptic-coordinates'. Azimuth and
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
452 height (between -180 and 180) are both in degrees."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
453 (let* ((ut (cadr time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
454 (ec (solar-equatorial-coordinates time sunrise-flag))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
455 (st (+ solar-sidereal-time-greenwich-midnight
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
456 (* ut 1.00273790935)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
457 ;; Hour angle (in degrees).
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
458 (ah (- (* st 15) (* 15 (car ec)) (* -1 (calendar-longitude))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
459 (de (cadr ec))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
460 (azimuth (solar-atn2 (- (* (solar-cosine-degrees ah)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
461 (solar-sin-degrees latitude))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
462 (* (solar-tangent-degrees de)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
463 (solar-cosine-degrees latitude)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
464 (solar-sin-degrees ah)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
465 (height (solar-arcsin
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
466 (+ (* (solar-sin-degrees latitude) (solar-sin-degrees de))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
467 (* (solar-cosine-degrees latitude)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
468 (solar-cosine-degrees de)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
469 (solar-cosine-degrees ah))))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
470 (if (> height 180) (setq height (- height 360)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
471 (list azimuth height)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
472
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
473 (defun solar-moment (direction latitude longitude time height)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
474 "Sunrise/sunset at location.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
475 Sunrise if DIRECTION =-1 or sunset if =1 at LATITUDE, LONGITUDE, with midday
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
476 being TIME.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
477
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
478 TIME is a pair with the first component being the number of Julian centuries
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
479 elapsed at 0 Universal Time, and the second component being the universal
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
480 time. For instance, the pair corresponding to November 28, 1995 at 16 UT is
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
481 \(-0.040945 16), -0.040945 being the number of Julian centuries elapsed between
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
482 Jan 1, 2000 at 12 UT and November 28, 1995 at 0 UT.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
483
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
484 HEIGHT is the angle the center of the sun has over the horizon for the contact
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
485 we are trying to find. For sunrise and sunset, it is usually -0.61 degrees,
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
486 accounting for the edge of the sun being on the horizon.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
487
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
488 Uses binary search."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
489 (let* ((ut (cadr time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
490 (possible t) ; we assume that rise or set are possible
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
491 (utmin (+ ut (* direction 12.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
492 (utmax ut) ; the time searched is between utmin and utmax
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
493 ;; utmin and utmax are in hours.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
494 (utmoment-old 0.0) ; rise or set approximation
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
495 (utmoment 1.0) ; rise or set approximation
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
496 (hut 0) ; sun height at utmoment
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
497 (t0 (car time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
498 (hmin (cadr (solar-horizontal-coordinates (list t0 utmin)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
499 latitude longitude t)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
500 (hmax (cadr (solar-horizontal-coordinates (list t0 utmax)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
501 latitude longitude t))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
502 ;; -0.61 degrees is the height of the middle of the sun, when it
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
503 ;; rises or sets.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
504 (if (< hmin height)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
505 (if (> hmax height)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
506 (while ;;; (< i 20) ; we perform a simple dichotomy
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
507 ;;; (> (abs (- hut height)) epsilon)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
508 (>= (abs (- utmoment utmoment-old))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
509 (/ solar-error 60))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
510 (setq utmoment-old utmoment
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
511 utmoment (/ (+ utmin utmax) 2)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
512 hut (cadr (solar-horizontal-coordinates
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
513 (list t0 utmoment) latitude longitude t)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
514 (if (< hut height) (setq utmin utmoment))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
515 (if (> hut height) (setq utmax utmoment)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
516 (setq possible nil)) ; the sun never rises
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
517 (setq possible nil)) ; the sun never sets
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
518 (if possible utmoment)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
519
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
520 (defun solar-sunrise-and-sunset (time latitude longitude height)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
521 "Sunrise, sunset and length of day.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
522 Parameters are the midday TIME and the LATITUDE, LONGITUDE of the location.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
523
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
524 TIME is a pair with the first component being the number of Julian centuries
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
525 elapsed at 0 Universal Time, and the second component being the universal
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
526 time. For instance, the pair corresponding to November 28, 1995 at 16 UT is
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
527 \(-0.040945 16), -0.040945 being the number of Julian centuries elapsed between
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
528 Jan 1, 2000 at 12 UT and November 28, 1995 at 0 UT.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
529
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
530 HEIGHT is the angle the center of the sun has over the horizon for the contact
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
531 we are trying to find. For sunrise and sunset, it is usually -0.61 degrees,
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
532 accounting for the edge of the sun being on the horizon.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
533
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
534 Coordinates are included because this function is called with latitude=1
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
535 degrees to find out if polar regions have 24 hours of sun or only night."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
536 (let ((rise-time (solar-moment -1 latitude longitude time height))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
537 (set-time (solar-moment 1 latitude longitude time height))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
538 day-length)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
539 (if (not (and rise-time set-time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
540 (if (or (and (> latitude 0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
541 solar-northern-spring-or-summer-season)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
542 (and (< latitude 0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
543 (not solar-northern-spring-or-summer-season)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
544 (setq day-length 24)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
545 (setq day-length 0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
546 (setq day-length (- set-time rise-time)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
547 (list (if rise-time (+ rise-time (/ calendar-time-zone 60.0)) nil)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
548 (if set-time (+ set-time (/ calendar-time-zone 60.0)) nil)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
549 day-length)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
550
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
551 (defun solar-time-string (time time-zone)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
552 "Printable form for decimal fraction TIME in TIME-ZONE.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
553 Format used is given by `calendar-time-display-form'."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
554 (let* ((time (round (* 60 time)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
555 (24-hours (/ time 60))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
556 (minutes (format "%02d" (% time 60)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
557 (12-hours (format "%d" (1+ (% (+ 24-hours 11) 12))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
558 (am-pm (if (>= 24-hours 12) "pm" "am"))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
559 (24-hours (format "%02d" 24-hours)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
560 (mapconcat 'eval calendar-time-display-form "")))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
561
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
562 (defun solar-daylight (time)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
563 "Printable form for TIME expressed in hours."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
564 (format "%d:%02d"
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
565 (floor time)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
566 (floor (* 60 (- time (floor time))))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
567
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
568 (defun solar-julian-ut-centuries (date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
569 "Number of Julian centuries since 1 Jan, 2000 at noon UT for Gregorian DATE."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
570 (/ (- (calendar-absolute-from-gregorian date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
571 (calendar-absolute-from-gregorian '(1 1.5 2000)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
572 36525.0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
573
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
574 (defun solar-date-to-et (date ut)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
575 "Ephemeris Time at Gregorian DATE at Universal Time UT (in hours).
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
576 Expressed in Julian centuries of Ephemeris Time."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
577 (solar-ephemeris-time (list (solar-julian-ut-centuries date) ut)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
578
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
579 (defun solar-time-equation (date ut)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
580 "Equation of time expressed in hours at Gregorian DATE at Universal time UT."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
581 (nth 2 (solar-ecliptic-coordinates (solar-date-to-et date ut) nil)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
582
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
583 (defun solar-exact-local-noon (date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
584 "Date and Universal Time of local noon at *local date* DATE.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
585 The date may be different from the one asked for, but it will be the right
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
586 local date. The second component of date should be an integer."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
587 (let* ((nd date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
588 (ut (- 12.0 (/ (calendar-longitude) 15)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
589 (te (solar-time-equation date ut)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
590 (setq ut (- ut te))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
591 (if (>= ut 24)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
592 (setq nd (list (car date) (1+ (cadr date))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
593 (nth 2 date))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
594 ut (- ut 24)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
595 (if (< ut 0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
596 (setq nd (list (car date) (1- (cadr date))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
597 (nth 2 date))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
598 ut (+ ut 24)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
599 (setq nd (calendar-gregorian-from-absolute ; date standardization
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
600 (calendar-absolute-from-gregorian nd)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
601 (list nd ut)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
602
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
603 (defun solar-sidereal-time (t0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
604 "Sidereal time (in hours) in Greenwich at T0 Julian centuries.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
605 T0 must correspond to 0 hours UT."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
606 (let* ((mean-sid-time (+ 6.6973746
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
607 (* 2400.051337 t0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
608 (* 0.0000258622 t0 t0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
609 (* -0.0000000017222 t0 t0 t0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
610 (et (solar-ephemeris-time (list t0 0.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
611 (nut-i (solar-ecliptic-coordinates et nil))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
612 (nut (nth 3 nut-i)) ; nutation
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
613 (i (cadr nut-i))) ; inclination
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
614 (mod (+ (mod (+ mean-sid-time
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
615 (/ (/ (* nut (solar-cosine-degrees i)) 15) 3600)) 24.0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
616 24.0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
617 24.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
618
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
619 (defun solar-sunrise-sunset (date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
620 "List of *local* times of sunrise, sunset, and daylight on Gregorian DATE.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
621 Corresponding value is nil if there is no sunrise/sunset."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
622 ;; First, get the exact moment of local noon.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
623 (let* ((exact-local-noon (solar-exact-local-noon date))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
624 ;; Get the time from the 2000 epoch.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
625 (t0 (solar-julian-ut-centuries (car exact-local-noon)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
626 ;; Store the sidereal time at Greenwich at midnight of UT time.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
627 ;; Find if summer or winter slightly above the equator.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
628 (equator-rise-set
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
629 (progn (setq solar-sidereal-time-greenwich-midnight
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
630 (solar-sidereal-time t0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
631 (solar-sunrise-and-sunset
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
632 (list t0 (cadr exact-local-noon))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
633 1.0
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
634 (calendar-longitude) 0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
635 ;; Store the spring/summer information, compute sunrise and
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
636 ;; sunset (two first components of rise-set). Length of day
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
637 ;; is the third component (it is only the difference between
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
638 ;; sunset and sunrise when there is a sunset and a sunrise)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
639 (rise-set
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
640 (progn
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
641 (setq solar-northern-spring-or-summer-season
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
642 (> (nth 2 equator-rise-set) 12))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
643 (solar-sunrise-and-sunset
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
644 (list t0 (cadr exact-local-noon))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
645 (calendar-latitude)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
646 (calendar-longitude) -0.61)))
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
647 (rise-time (car rise-set))
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
648 (adj-rise (if rise-time (dst-adjust-time date rise-time)))
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
649 (set-time (cadr rise-set))
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
650 (adj-set (if set-time (dst-adjust-time date set-time)))
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
651 (length (nth 2 rise-set)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
652 (list
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
653 (and rise-time (calendar-date-equal date (car adj-rise)) (cdr adj-rise))
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
654 (and set-time (calendar-date-equal date (car adj-set)) (cdr adj-set))
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
655 (solar-daylight length))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
656
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
657 (defun solar-sunrise-sunset-string (date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
658 "String of *local* times of sunrise, sunset, and daylight on Gregorian DATE."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
659 (let ((l (solar-sunrise-sunset date)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
660 (format
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
661 "%s, %s at %s (%s hours daylight)"
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
662 (if (car l)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
663 (concat "Sunrise " (apply 'solar-time-string (car l)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
664 "No sunrise")
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
665 (if (cadr l)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
666 (concat "sunset " (apply 'solar-time-string (cadr l)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
667 "no sunset")
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
668 (eval calendar-location-name)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
669 (nth 2 l))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
670
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
671 (defconst solar-data-list
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
672 '((403406 4.721964 1.621043)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
673 (195207 5.937458 62830.348067)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
674 (119433 1.115589 62830.821524)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
675 (112392 5.781616 62829.634302)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
676 (3891 5.5474 125660.5691)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
677 (2819 1.5120 125660.984)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
678 (1721 4.1897 62832.4766)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
679 (0 1.163 0.813)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
680 (660 5.415 125659.31)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
681 (350 4.315 57533.85)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
682 (334 4.553 -33.931)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
683 (314 5.198 777137.715)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
684 (268 5.989 78604.191)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
685 (242 2.911 5.412)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
686 (234 1.423 39302.098)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
687 (158 0.061 -34.861)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
688 (132 2.317 115067.698)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
689 (129 3.193 15774.337)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
690 (114 2.828 5296.670)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
691 (99 0.52 58849.27)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
692 (93 4.65 5296.11)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
693 (86 4.35 -3980.70)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
694 (78 2.75 52237.69)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
695 (72 4.50 55076.47)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
696 (68 3.23 261.08)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
697 (64 1.22 15773.85)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
698 (46 0.14 188491.03)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
699 (38 3.44 -7756.55)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
700 (37 4.37 264.89)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
701 (32 1.14 117906.27)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
702 (29 2.84 55075.75)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
703 (28 5.96 -7961.39)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
704 (27 5.09 188489.81)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
705 (27 1.72 2132.19)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
706 (25 2.56 109771.03)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
707 (24 1.92 54868.56)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
708 (21 0.09 25443.93)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
709 (21 5.98 -55731.43)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
710 (20 4.03 60697.74)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
711 (18 4.47 2132.79)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
712 (17 0.79 109771.63)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
713 (14 4.24 -7752.82)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
714 (13 2.01 188491.91)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
715 (13 2.65 207.81)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
716 (13 4.98 29424.63)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
717 (12 0.93 -7.99)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
718 (10 2.21 46941.14)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
719 (10 3.59 -68.29)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
720 (10 1.50 21463.25)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
721 (10 2.55 157208.40))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
722 "Data used for calculation of solar longitude.")
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
724 (defun solar-longitude (d)
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
725 "Longitude of sun on astronomical (Julian) day number D.
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
726 Accuracy is about 0.0006 degree (about 365.25*24*60*0.0006/360 = 1 minutes).
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
727 The values of `calendar-daylight-savings-starts',
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
728 `calendar-daylight-savings-starts-time', `calendar-daylight-savings-ends',
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
729 `calendar-daylight-savings-ends-time', `calendar-daylight-time-offset', and
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
730 `calendar-time-zone' are used to interpret local time."
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
731 (let* ((a-d (calendar-absolute-from-astro d))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
732 ;; Get Universal Time.
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
733 (date (calendar-astro-from-absolute
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
734 (- a-d
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
735 (if (dst-in-effect a-d)
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
736 (/ calendar-daylight-time-offset 24.0 60.0) 0)
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
737 (/ calendar-time-zone 60.0 24.0))))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
738 ;; Get Ephemeris Time.
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
739 (date (+ date (solar-ephemeris-correction
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
740 (extract-calendar-year
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
741 (calendar-gregorian-from-absolute
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
742 (floor
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
743 (calendar-absolute-from-astro
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
744 date)))))))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
745 (U (/ (- date 2451545) 3652500))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
746 (longitude
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
747 (+ 4.9353929
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
748 (* 62833.1961680 U)
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
749 (* 0.0000001
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
750 (apply '+
92598
391954131548 Unquote lambda functions.
Glenn Morris <rgm@gnu.org>
parents: 92553
diff changeset
751 (mapcar (lambda (x)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
752 (* (car x)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
753 (sin (mod
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
754 (+ (cadr x)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
755 (* (nth 2 x) U))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
756 (* 2 pi)))))
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
757 solar-data-list)))))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
758 (aberration
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
759 (* 0.0000001 (- (* 17 (cos (+ 3.10 (* 62830.14 U)))) 973)))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
760 (A1 (mod (+ 2.18 (* U (+ -3375.70 (* 0.36 U)))) (* 2 pi)))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
761 (A2 (mod (+ 3.51 (* U (+ 125666.39 (* 0.10 U)))) (* 2 pi)))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
762 (nutation (* -0.0000001 (+ (* 834 (sin A1)) (* 64 (sin A2))))))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
763 (mod (radians-to-degrees (+ longitude aberration nutation)) 360.0)))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
764
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
765 (defun solar-date-next-longitude (d l)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
766 "First time after day D when solar longitude is a multiple of L degrees.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
767 D is a Julian day number. L must be an integer divisor of 360.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
768 The result is for `calendar-location-name', and is in local time
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
769 \(including any daylight saving rules) expressed in astronomical (Julian)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
770 day numbers. The values of `calendar-daylight-savings-starts',
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
771 `calendar-daylight-savings-starts-time', `calendar-daylight-savings-ends',
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
772 `calendar-daylight-savings-ends-time', `calendar-daylight-time-offset',
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
773 and `calendar-time-zone' are used to interpret local time."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
774 (let* ((long)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
775 (start d)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
776 (start-long (solar-longitude d))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
777 (next (mod (* l (1+ (floor (/ start-long l)))) 360))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
778 (end (+ d (* (/ l 360.0) 400)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
779 (end-long (solar-longitude end)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
780 (while ; bisection search for nearest minute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
781 (< 0.00001 (- end start))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
782 ;; start <= d < end
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
783 ;; start-long <= next < end-long when next != 0
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
784 ;; when next = 0, we look for the discontinuity (start-long is near 360
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
785 ;; and end-long is small (less than l).
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
786 (setq d (/ (+ start end) 2.0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
787 long (solar-longitude d))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
788 (if (or (and (not (zerop next)) (< long next))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
789 (and (zerop next) (< l long)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
790 (setq start d
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
791 start-long long)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
792 (setq end d
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
793 end-long long)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
794 (/ (+ start end) 2.0)))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
795
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
796 ;;;###autoload
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797 (defun sunrise-sunset (&optional arg)
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
798 "Local time of sunrise and sunset for today. Accurate to a few seconds.
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
799 If called with an optional prefix argument ARG, prompt for date.
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
800 If called with an optional double prefix argument, prompt for
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
801 longitude, latitude, time zone, and date, and always use standard time.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803 This function is suitable for execution in a .emacs file."
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
804 (interactive "p")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
805 (or arg (setq arg 1))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
806 (if (and (< arg 16)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
807 (not (and calendar-latitude calendar-longitude calendar-time-zone)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
808 (solar-setup))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
809 (let* ((calendar-longitude
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
810 (if (< arg 16) calendar-longitude
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
811 (solar-get-number
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
812 "Enter longitude (decimal fraction; + east, - west): ")))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
813 (calendar-latitude
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
814 (if (< arg 16) calendar-latitude
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
815 (solar-get-number
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
816 "Enter latitude (decimal fraction; + north, - south): ")))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
817 (calendar-time-zone
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
818 (if (< arg 16) calendar-time-zone
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
819 (solar-get-number
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
820 "Enter difference from Coordinated Universal Time (in minutes): ")))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
821 (calendar-location-name
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
822 (if (< arg 16) calendar-location-name
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
823 (let ((float-output-format "%.1f"))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
824 (format "%s%s, %s%s"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
825 (if (numberp calendar-latitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
826 (abs calendar-latitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
827 (+ (aref calendar-latitude 0)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
828 (/ (aref calendar-latitude 1) 60.0)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
829 (if (numberp calendar-latitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
830 (if (> calendar-latitude 0) "N" "S")
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
831 (if (eq (aref calendar-latitude 2) 'north) "N" "S"))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
832 (if (numberp calendar-longitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
833 (abs calendar-longitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
834 (+ (aref calendar-longitude 0)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
835 (/ (aref calendar-longitude 1) 60.0)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
836 (if (numberp calendar-longitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
837 (if (> calendar-longitude 0) "E" "W")
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
838 (if (eq (aref calendar-longitude 2) 'east)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
839 "E" "W"))))))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
840 (calendar-standard-time-zone-name
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
841 (if (< arg 16) calendar-standard-time-zone-name
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
842 (cond ((zerop calendar-time-zone) "UTC")
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
843 ((< calendar-time-zone 0)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
844 (format "UTC%dmin" calendar-time-zone))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
845 (t (format "UTC+%dmin" calendar-time-zone)))))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
846 (calendar-daylight-savings-starts
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
847 (if (< arg 16) calendar-daylight-savings-starts))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
848 (calendar-daylight-savings-ends
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
849 (if (< arg 16) calendar-daylight-savings-ends))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
850 (date (if (< arg 4) (calendar-current-date) (calendar-read-date)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
851 (date-string (calendar-date-string date t))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
852 (time-string (solar-sunrise-sunset-string date))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
853 (msg (format "%s: %s" date-string time-string))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
854 (one-window (one-window-p t)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
855 (if (<= (length msg) (frame-width))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
856 (message "%s" msg)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
857 (with-output-to-temp-buffer "*temp*"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
858 (princ (concat date-string "\n" time-string)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
859 (message "%s"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
860 (substitute-command-keys
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
861 (if one-window
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
862 (if pop-up-windows
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
863 "Type \\[delete-other-windows] to remove temp window."
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
864 "Type \\[switch-to-buffer] RET to remove temp window.")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
865 "Type \\[switch-to-buffer-other-window] RET to restore old \
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
866 contents of temp window."))))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
867
92841
bde51dafc021 Add calendar-specific autoload cookies.
Glenn Morris <rgm@gnu.org>
parents: 92822
diff changeset
868 ;;;###cal-autoload
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869 (defun calendar-sunrise-sunset ()
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
870 "Local time of sunrise and sunset for date under cursor.
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
871 Accurate to a few seconds."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872 (interactive)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
873 (or (and calendar-latitude calendar-longitude calendar-time-zone)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 (solar-setup))
5835
1c685c3bd5a9 (calendar-sunrise-sunset): Use new error arg to calendar-cursor-to-date.
Richard M. Stallman <rms@gnu.org>
parents: 5698
diff changeset
875 (let ((date (calendar-cursor-to-date t)))
5698
d127e0963a2c (calendar-sunrise-sunset): Add date to message.
Richard M. Stallman <rms@gnu.org>
parents: 5010
diff changeset
876 (message "%s: %s"
d127e0963a2c (calendar-sunrise-sunset): Add date to message.
Richard M. Stallman <rms@gnu.org>
parents: 5010
diff changeset
877 (calendar-date-string date t t)
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
878 (solar-sunrise-sunset-string date))))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
880 (defvar date)
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
881
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
882 ;; To be called from list-sexp-diary-entries, where DATE is bound.
92841
bde51dafc021 Add calendar-specific autoload cookies.
Glenn Morris <rgm@gnu.org>
parents: 92822
diff changeset
883 ;;;###diary-autoload
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884 (defun diary-sunrise-sunset ()
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885 "Local time of sunrise and sunset as a diary entry.
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
886 Accurate to a few seconds."
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
887 (or (and calendar-latitude calendar-longitude calendar-time-zone)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 (solar-setup))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
889 (solar-sunrise-sunset-string date))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
891 ;; To be called from list-sexp-diary-entries, where DATE is bound.
92841
bde51dafc021 Add calendar-specific autoload cookies.
Glenn Morris <rgm@gnu.org>
parents: 92822
diff changeset
892 ;;;###diary-autoload
46617
b15eab0c85c1 (diary-sabbath-candles): Add optional MARK
Richard M. Stallman <rms@gnu.org>
parents: 44395
diff changeset
893 (defun diary-sabbath-candles (&optional mark)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
894 "Local time of candle lighting diary entry--applies if date is a Friday.
46617
b15eab0c85c1 (diary-sabbath-candles): Add optional MARK
Richard M. Stallman <rms@gnu.org>
parents: 44395
diff changeset
895 No diary entry if there is no sunset on that date.
b15eab0c85c1 (diary-sabbath-candles): Add optional MARK
Richard M. Stallman <rms@gnu.org>
parents: 44395
diff changeset
896
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
897 An optional parameter MARK specifies a face or single-character string to
46617
b15eab0c85c1 (diary-sabbath-candles): Add optional MARK
Richard M. Stallman <rms@gnu.org>
parents: 44395
diff changeset
898 use when highlighting the day in the calendar."
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
899 (or (and calendar-latitude calendar-longitude calendar-time-zone)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
900 (solar-setup))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
901 (if (= (% (calendar-absolute-from-gregorian date) 7) 5) ; Friday
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
902 (let* ((sunset (cadr (solar-sunrise-sunset date)))
44367
c652288e6fb7 (solar-spring-or-summer-season): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 42706
diff changeset
903 (light (if sunset
c652288e6fb7 (solar-spring-or-summer-season): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 42706
diff changeset
904 (cons (- (car sunset)
c652288e6fb7 (solar-spring-or-summer-season): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 42706
diff changeset
905 (/ diary-sabbath-candles-minutes 60.0))
c652288e6fb7 (solar-spring-or-summer-season): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 42706
diff changeset
906 (cdr sunset)))))
15095
66db908addc7 Double DST correction removed!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14917
diff changeset
907 (if sunset
46617
b15eab0c85c1 (diary-sabbath-candles): Add optional MARK
Richard M. Stallman <rms@gnu.org>
parents: 44395
diff changeset
908 (cons mark
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
909 (format "%s Sabbath candle lighting"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
910 (apply 'solar-time-string light)))))))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
912 ;; From Meeus, 1991, page 167.
52113
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
913 (defconst solar-seasons-data
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
914 '((485 324.96 1934.136)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
915 (203 337.23 32964.467)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
916 (199 342.08 20.186)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
917 (182 27.85 445267.112)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
918 (156 73.14 45036.886)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
919 (136 171.52 22518.443)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
920 (77 222.54 65928.934)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
921 (74 296.72 3034.906)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
922 (70 243.58 9037.513)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
923 (58 119.81 33718.147)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
924 (52 297.17 150.678)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
925 (50 21.02 2281.226)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
926 (45 247.54 29929.562)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
927 (44 325.15 31555.956)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
928 (29 60.93 4443.417)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
929 (18 155.12 67555.328)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
930 (17 288.79 4562.452)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
931 (16 198.04 62894.029)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
932 (14 199.76 31436.921)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
933 (12 95.39 14577.848)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
934 (12 287.11 31931.756)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
935 (12 320.81 34777.259)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
936 (9 227.73 1222.114)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
937 (8 15.45 16859.074))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
938 "Data for solar equinox/solstice calculations.")
52113
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
939
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
940 (defun solar-equinoxes/solstices (k year)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
941 "Date of equinox/solstice K for YEAR.
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
942 K=0, spring equinox; K=1, summer solstice; K=2, fall equinox;
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
943 K=3, winter solstice. RESULT is a Gregorian local date.
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
944 Accurate to within a minute between 1951 and 2050."
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
945 (let* ((JDE0 (solar-mean-equinoxes/solstices k year))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
946 (T (/ (- JDE0 2451545.0) 36525))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
947 (W (- (* 35999.373 T) 2.47))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
948 (Delta-lambda (+ 1 (* 0.0334 (solar-cosine-degrees W))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
949 (* 0.0007 (solar-cosine-degrees (* 2 W)))))
92598
391954131548 Unquote lambda functions.
Glenn Morris <rgm@gnu.org>
parents: 92553
diff changeset
950 (S (apply '+ (mapcar (lambda(x)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
951 (* (car x) (solar-cosine-degrees
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
952 (+ (* (nth 2 x) T) (cadr x)))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
953 solar-seasons-data)))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
954 (JDE (+ JDE0 (/ (* 0.00001 S) Delta-lambda)))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
955 ;; Ephemeris time correction.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
956 (correction (+ 102.3 (* 123.5 T) (* 32.5 T T)))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
957 (JD (- JDE (/ correction 86400)))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
958 (date (calendar-gregorian-from-absolute (floor (- JD 1721424.5))))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
959 (time (- (- JD 0.5) (floor (- JD 0.5)))))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
960 (list (car date) (+ (cadr date) time
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
961 (/ (/ calendar-time-zone 60.0) 24.0))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
962 (nth 2 date))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
963
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
964 ;; From Meeus, 1991, page 166.
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
965 (defun solar-mean-equinoxes/solstices (k year)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
966 "Julian day of mean equinox/solstice K for YEAR.
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
967 K=0, spring equinox; K=1, summer solstice; K=2, fall equinox; K=3, winter
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
968 solstice. These formulae are only to be used between 1000 BC and 3000 AD."
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
969 (let ((y (/ year 1000.0))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
970 (z (/ (- year 2000) 1000.0)))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
971 (if (< year 1000) ; actually between -1000 and 1000
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
972 (cond ((= k 0) (+ 1721139.29189
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
973 (* 365242.13740 y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
974 (* 0.06134 y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
975 (* 0.00111 y y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
976 (* -0.00071 y y y y)))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
977 ((= k 1) (+ 1721233.25401
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
978 (* 365241.72562 y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
979 (* -0.05323 y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
980 (* 0.00907 y y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
981 (* 0.00025 y y y y)))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
982 ((= k 2) (+ 1721325.70455
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
983 (* 365242.49558 y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
984 (* -0.11677 y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
985 (* -0.00297 y y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
986 (* 0.00074 y y y y)))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
987 ((= k 3) (+ 1721414.39987
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
988 (* 365242.88257 y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
989 (* -0.00769 y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
990 (* -0.00933 y y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
991 (* -0.00006 y y y y))))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
992 ; actually between 1000 and 3000
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
993 (cond ((= k 0) (+ 2451623.80984
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
994 (* 365242.37404 z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
995 (* 0.05169 z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
996 (* -0.00411 z z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
997 (* -0.00057 z z z z)))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
998 ((= k 1) (+ 2451716.56767
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
999 (* 365241.62603 z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1000 (* 0.00325 z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1001 (* 0.00888 z z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1002 (* -0.00030 z z z z)))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1003 ((= k 2) (+ 2451810.21715
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1004 (* 365242.01767 z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1005 (* -0.11575 z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1006 (* 0.00337 z z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1007 (* 0.00078 z z z z)))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1008 ((= k 3) (+ 2451900.05952
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1009 (* 365242.74049 z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1010 (* -0.06223 z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1011 (* -0.00823 z z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1012 (* 0.00032 z z z z)))))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
1013
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1014 (defvar displayed-month) ; from generate-calendar
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1015 (defvar displayed-year)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1016
92841
bde51dafc021 Add calendar-specific autoload cookies.
Glenn Morris <rgm@gnu.org>
parents: 92822
diff changeset
1017 ;;;###holiday-autoload
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
1018 (defun solar-equinoxes-solstices ()
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
1019 "Local date and time of equinoxes and solstices, if visible in the calendar.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 Requires floating point."
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
1021 (let ((m displayed-month)
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
1022 (y displayed-year))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 (increment-calendar-month m y (cond ((= 1 (% m 3)) -1)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1024 ((= 2 (% m 3)) 1)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1025 (t 0)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 (let* ((calendar-standard-time-zone-name
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
1027 (if calendar-time-zone calendar-standard-time-zone-name "UTC"))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 (calendar-daylight-savings-starts
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 (if calendar-time-zone calendar-daylight-savings-starts))
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 (calendar-daylight-savings-ends
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 (if calendar-time-zone calendar-daylight-savings-ends))
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 (calendar-time-zone (if calendar-time-zone calendar-time-zone 0))
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 (k (1- (/ m 3)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
1034 (d0 (solar-equinoxes/solstices k y))
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1035 (d1 (list (car d0) (floor (cadr d0)) (nth 2 d0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1036 (h0 (* 24 (- (cadr d0) (floor (cadr d0)))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
1037 (adj (dst-adjust-time d1 h0))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1038 (d (list (caar adj)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1039 (+ (car (cdar adj))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1040 (/ (cadr adj) 24.0))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1041 (cadr (cdar adj))))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
1042 ;; The following is nearly as accurate, but not quite:
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1043 ;; (d0 (solar-date-next-longitude
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
1044 ;; (calendar-astro-from-absolute
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
1045 ;; (calendar-absolute-from-gregorian
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
1046 ;; (list (+ 3 (* k 3)) 15 y)))
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
1047 ;; 90))
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
1048 ;; (abs-day (calendar-absolute-from-astro d)))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
1049 (abs-day (calendar-absolute-from-gregorian d)))
13045
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1050 (list
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1051 (list (calendar-gregorian-from-absolute (floor abs-day))
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1052 (format "%s %s"
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1053 (nth k (if (and calendar-latitude
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1054 (< (calendar-latitude) 0))
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1055 solar-s-hemi-seasons
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1056 solar-n-hemi-seasons))
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1057 (solar-time-string
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1058 (* 24 (- abs-day (floor abs-day)))
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1059 (if (dst-in-effect abs-day)
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1060 calendar-daylight-time-zone-name
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1061 calendar-standard-time-zone-name))))))))
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1062
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 (provide 'solar)
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1065
92598
391954131548 Unquote lambda functions.
Glenn Morris <rgm@gnu.org>
parents: 92553
diff changeset
1066 ;; arch-tag: bc0ff693-df58-4666-bde4-2a7837ccb8fe
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 ;;; solar.el ends here