Mercurial > emacs
annotate lisp/timezone.el @ 51151:fe11e703042b
Summary: MIME support added for e-mail processing that
skips encoded regions. Allow user to skip saving Fcc messages with
large attachments. Fixed region skipping bug with multi-line
comments - e.g. tex $ regions spanning multiple lines.
Added support for postscript and uuencoded regions.
Redundant dictionary file names purged.
Dictionary definition field name changed from "Character Set"
to "Coding System". Fixed bug in reloading dictionaries.
Modified headers to reflect new version. XEmacs menu now adds
customize item.
(ispell-check-version): No longer an aliased function.
Returns library path if not called interactively.
Variable `temporary-file-directory' protected if not loaded.
(check-ispell-version): Now the alias for `ispell-check-version'.
(ispell-message-fcc-skip): New variable that determines if and when
to query about saving Fcc copy of message if an attachment is large.
(ispell-skip-html): Declared buffer-local.
(ispell-local-dictionary-alist): Docstring expanded.
Tag name changed from "Character Set" to "Coding System".
(ispell-dictionary-alist-1): Removed redundant command-line option to
load brasileiro, british, and castellano dictionary files.
(ispell-dictionary-alist-2): Removed redundant command-line option to
load czech dictionary file.
(ispell-dictionary-alist-3): Moved francais-tex here.
(ispell-dictionary-alist-4): Removed german and german8 dictionaries.
The deutsch ones are the correct definitions. `nederlands'
and `nederlands8' dictionaries moved here.
(ispell-dictionary-alist-5): `polish' and `portugues' dictionaries
moved here. Removed redundant command-line option to `norsk'
and `portugues'.
(ispell-dictionary-alist-6): Removed redundant command-line option to
load `russian' and `slovak' dictionary files.
(ispell-dictionary-alist): Tag name changed from "Character Set" to
"Coding System".
(ispell-version): Updated to 3.6.
(ispell-library-directory): Calls non-deprecated function.
(ispell-valid-dictionary-list): New function returning all valid
dictionaries on machine.
(ispell-checking-message): Documentation string improved.
(ispell-skip-region-alist): Added uuencoded and postscript region
skipping. Improved http/e-mail/file regexp to not match `/.\w'.
(ispell-html-skip-alists): New variable for html region support.
(ispell-send-string): Removed redundant xemacs check.
(ispell-word): Fix spelling error in documentation string, added
extent information to support highlighting in ispell-minor-mode.
(ispell-command-loop): Disable horizontal scrollbar in XEmacs
choices buffer.
(ispell-show-choices): Directly select `choices-window'.
(ispell-help): Use default buffer size for electric help.
(ispell-adjusted-window-height): Correct for xemacs detection.
(ispell-start-process): Don't double specify dictionary file name.
(ispell-init-process): Set `ispell-library-path' each call.
(ispell-change-dictionary): Now only completes valid dictionaries.
(ispell-region): Add support for MIME region skipping and Fcc
message query for large attachments.
(ispell-begin-skip-region-regexp): Add documentation string.
Added message support and cleaned up code for generic and html regions.
(ispell-begin-skip-region): Function is now requires alist argument.
(ispell-begin-tex-skip-regexp): Added comments and support
improved html and message regions.
(ispell-skip-region-list): New function for MIME and region skipping.
(ispell-tex-arg-end): Add documentation string.
(ispell-ignore-fcc): New function to query saving Fcc message.
(ispell-skip-region): Calculate alist for key match dynamically,
html skipping pushed to alists.
(ispell-get-line): Add support for multi-line comment regions.
(ispell): Check that variables to continue spelling are bound.
(ispell-message-text-end): Postscript and uuencoded regions now
supported as MIME regions, rather than as end-of-message region.
(ispell-mime-multipartp): New function supporting MIME.
(ispell-mime-skip-part): New function supporting MIME.
(ispell-message): Add MIME support.
(ispell-buffer-local-parsing): Variable `ispell-skip-html' now local.
(ispell-buffer-local-dict): Fixed bug for detecting and reloading
new dictionary.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Thu, 22 May 2003 21:34:00 +0000 |
parents | b174db545cfd |
children | 695cf19ef79e d7ddb3e565de |
rev | line source |
---|---|
13337 | 1 ;;; timezone.el --- time zone package for GNU Emacs |
2908 | 2 |
25552
fbfe59033eaf
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
25383
diff
changeset
|
3 ;; Copyright (C) 1990, 1991, 1992, 1993, 1996, 1999 Free Software Foundation, Inc. |
2910
74b7994f2d20
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2908
diff
changeset
|
4 |
13337 | 5 ;; Author: Masanobu Umeda |
6 ;; Maintainer: umerin@mse.kyutech.ac.jp | |
7 ;; Keywords: news | |
2908 | 8 |
9 ;; This file is part of GNU Emacs. | |
10 | |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
13 ;; the Free Software Foundation; either version 2, or (at your option) | |
14 ;; any later version. | |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
14169 | 22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
24 ;; Boston, MA 02111-1307, USA. | |
2908 | 25 |
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
32290
diff
changeset
|
26 ;;; Commentary: |
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
32290
diff
changeset
|
27 |
2908 | 28 ;;; Code: |
29 | |
30 (defvar timezone-world-timezones | |
31 '(("PST" . -800) | |
32 ("PDT" . -700) | |
33 ("MST" . -700) | |
34 ("MDT" . -600) | |
35 ("CST" . -600) | |
36 ("CDT" . -500) | |
37 ("EST" . -500) | |
38 ("EDT" . -400) | |
39 ("AST" . -400) ;by <clamen@CS.CMU.EDU> | |
40 ("NST" . -330) ;by <clamen@CS.CMU.EDU> | |
9770
9b9006f58e48
(timezone-world-timezones): Add "UT" -> +000.
Richard M. Stallman <rms@gnu.org>
parents:
9503
diff
changeset
|
41 ("UT" . +000) |
2908 | 42 ("GMT" . +000) |
43 ("BST" . +100) | |
44 ("MET" . +100) | |
45 ("EET" . +200) | |
46 ("JST" . +900) | |
47 ("GMT+1" . +100) ("GMT+2" . +200) ("GMT+3" . +300) | |
48 ("GMT+4" . +400) ("GMT+5" . +500) ("GMT+6" . +600) | |
49 ("GMT+7" . +700) ("GMT+8" . +800) ("GMT+9" . +900) | |
50 ("GMT+10" . +1000) ("GMT+11" . +1100) ("GMT+12" . +1200) ("GMT+13" . +1300) | |
51 ("GMT-1" . -100) ("GMT-2" . -200) ("GMT-3" . -300) | |
52 ("GMT-4" . -400) ("GMT-5" . -500) ("GMT-6" . -600) | |
53 ("GMT-7" . -700) ("GMT-8" . -800) ("GMT-9" . -900) | |
54 ("GMT-10" . -1000) ("GMT-11" . -1100) ("GMT-12" . -1200)) | |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
55 "*Time differentials of timezone from GMT in +-HHMM form. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
56 This list is obsolescent, and is present only for backwards compatibility, |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
57 because time zone names are ambiguous in practice. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
58 Use `current-time-zone' instead.") |
2908 | 59 |
60 (defvar timezone-months-assoc | |
61 '(("JAN" . 1)("FEB" . 2)("MAR" . 3) | |
62 ("APR" . 4)("MAY" . 5)("JUN" . 6) | |
63 ("JUL" . 7)("AUG" . 8)("SEP" . 9) | |
64 ("OCT" . 10)("NOV" . 11)("DEC" . 12)) | |
65 "Alist of first three letters of a month and its numerical representation.") | |
66 | |
67 (defun timezone-make-date-arpa-standard (date &optional local timezone) | |
68 "Convert DATE to an arpanet standard date. | |
24305
85040d56fb60
(timezone-make-date-sortable, timezone-make-date-arpa-standard): Doc fix.
Dave Love <fx@gnu.org>
parents:
19190
diff
changeset
|
69 Optional 2nd argument LOCAL specifies the default local timezone of the DATE; |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
70 if nil, GMT is assumed. |
24305
85040d56fb60
(timezone-make-date-sortable, timezone-make-date-arpa-standard): Doc fix.
Dave Love <fx@gnu.org>
parents:
19190
diff
changeset
|
71 Optional 3rd argument TIMEZONE specifies a time zone to be represented in; |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
72 if nil, the local time zone is assumed." |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
73 (let ((new (timezone-fix-time date local timezone))) |
2908 | 74 (timezone-make-arpa-date (aref new 0) (aref new 1) (aref new 2) |
75 (timezone-make-time-string | |
76 (aref new 3) (aref new 4) (aref new 5)) | |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
77 (aref new 6)) |
2908 | 78 )) |
79 | |
80 (defun timezone-make-date-sortable (date &optional local timezone) | |
81 "Convert DATE to a sortable date string. | |
24305
85040d56fb60
(timezone-make-date-sortable, timezone-make-date-arpa-standard): Doc fix.
Dave Love <fx@gnu.org>
parents:
19190
diff
changeset
|
82 Optional 2nd argument LOCAL specifies the default local timezone of the DATE; |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
83 if nil, GMT is assumed. |
24305
85040d56fb60
(timezone-make-date-sortable, timezone-make-date-arpa-standard): Doc fix.
Dave Love <fx@gnu.org>
parents:
19190
diff
changeset
|
84 Optional 3rd argument TIMEZONE specifies a timezone to be represented in; |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
85 if nil, the local time zone is assumed." |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
86 (let ((new (timezone-fix-time date local timezone))) |
2908 | 87 (timezone-make-sortable-date (aref new 0) (aref new 1) (aref new 2) |
88 (timezone-make-time-string | |
89 (aref new 3) (aref new 4) (aref new 5))) | |
90 )) | |
91 | |
92 | |
93 ;; | |
94 ;; Parsers and Constructors of Date and Time | |
95 ;; | |
96 | |
97 (defun timezone-make-arpa-date (year month day time &optional timezone) | |
98 "Make arpanet standard date string from YEAR, MONTH, DAY, and TIME. | |
99 Optional argument TIMEZONE specifies a time zone." | |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
100 (let ((zone |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
101 (if (listp timezone) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
102 (let* ((m (timezone-zone-to-minute timezone)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
103 (absm (if (< m 0) (- m) m))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
104 (format "%c%02d%02d" |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
105 (if (< m 0) ?- ?+) (/ absm 60) (% absm 60))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
106 timezone))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
107 (format "%02d %s %04d %s %s" |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
108 day |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
109 (capitalize (car (rassq month timezone-months-assoc))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
110 year |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
111 time |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
112 zone))) |
2908 | 113 |
114 (defun timezone-make-sortable-date (year month day time) | |
115 "Make sortable date string from YEAR, MONTH, DAY, and TIME." | |
116 (format "%4d%02d%02d%s" | |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
117 year month day time)) |
2908 | 118 |
119 (defun timezone-make-time-string (hour minute second) | |
120 "Make time string from HOUR, MINUTE, and SECOND." | |
121 (format "%02d:%02d:%02d" hour minute second)) | |
122 | |
123 (defun timezone-parse-date (date) | |
4835
4324c797a9e3
(timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents:
4510
diff
changeset
|
124 "Parse DATE and return a vector [YEAR MONTH DAY TIME TIMEZONE]. |
32290
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
125 Two-digit dates are `windowed'. Those <69 have 2000 added; otherwise 1900 |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
126 is added. Three-digit dates have 1900 added. |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
127 TIMEZONE is nil for DATEs without a zone field. |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
128 |
4835
4324c797a9e3
(timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents:
4510
diff
changeset
|
129 Understands the following styles: |
2908 | 130 (1) 14 Apr 89 03:20[:12] [GMT] |
131 (2) Fri, 17 Mar 89 4:01[:33] [GMT] | |
132 (3) Mon Jan 16 16:12[:37] [GMT] 1989 | |
4835
4324c797a9e3
(timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents:
4510
diff
changeset
|
133 (4) 6 May 1992 1641-JST (Wednesday) |
9988
23ad7670da34
(timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents:
9770
diff
changeset
|
134 (5) 22-AUG-1993 10:59:12.82 |
23ad7670da34
(timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents:
9770
diff
changeset
|
135 (6) Thu, 11 Apr 16:17:12 91 [MET] |
15632
b7fddad951a0
(timezone-parse-date): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
15614
diff
changeset
|
136 (7) Mon, 6 Jul 16:47:20 T 1992 [MET] |
19190
7903b3fb5ec5
(timezone-parse-date): Handle additional style (9).
Richard M. Stallman <rms@gnu.org>
parents:
17627
diff
changeset
|
137 (8) 1996-06-24 21:13:12 [GMT] |
7903b3fb5ec5
(timezone-parse-date): Handle additional style (9).
Richard M. Stallman <rms@gnu.org>
parents:
17627
diff
changeset
|
138 (9) 1996-06-24 21:13-ZONE" |
15614
6fb29f91d5ec
(timezone-parse-date): Handle ISO 8601 dates, so rmailsort does the right
Miles Bader <miles@gnu.org>
parents:
14169
diff
changeset
|
139 ;; Get rid of any text properties. |
12482
3f4cd64a4730
(timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents:
10255
diff
changeset
|
140 (and (stringp date) |
3f4cd64a4730
(timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents:
10255
diff
changeset
|
141 (or (text-properties-at 0 date) |
3f4cd64a4730
(timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents:
10255
diff
changeset
|
142 (next-property-change 0 date)) |
3f4cd64a4730
(timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents:
10255
diff
changeset
|
143 (setq date (copy-sequence date)) |
3f4cd64a4730
(timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents:
10255
diff
changeset
|
144 (set-text-properties 0 (length date) nil date)) |
2908 | 145 (let ((date (or date "")) |
146 (year nil) | |
147 (month nil) | |
148 (day nil) | |
149 (time nil) | |
150 (zone nil)) ;This may be nil. | |
151 (cond ((string-match | |
17627
2492168c1d05
(timezone-parse-date): Match forms 1 and 2 first.
Richard M. Stallman <rms@gnu.org>
parents:
16942
diff
changeset
|
152 "\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]*\\([-+a-zA-Z0-9]+\\)" date) |
2492168c1d05
(timezone-parse-date): Match forms 1 and 2 first.
Richard M. Stallman <rms@gnu.org>
parents:
16942
diff
changeset
|
153 ;; Styles: (1) and (2) with timezone and buggy timezone |
2492168c1d05
(timezone-parse-date): Match forms 1 and 2 first.
Richard M. Stallman <rms@gnu.org>
parents:
16942
diff
changeset
|
154 ;; This is most common in mail and news, |
2492168c1d05
(timezone-parse-date): Match forms 1 and 2 first.
Richard M. Stallman <rms@gnu.org>
parents:
16942
diff
changeset
|
155 ;; so it is worth trying first. |
2492168c1d05
(timezone-parse-date): Match forms 1 and 2 first.
Richard M. Stallman <rms@gnu.org>
parents:
16942
diff
changeset
|
156 (setq year 3 month 2 day 1 time 4 zone 5)) |
2492168c1d05
(timezone-parse-date): Match forms 1 and 2 first.
Richard M. Stallman <rms@gnu.org>
parents:
16942
diff
changeset
|
157 ((string-match |
2492168c1d05
(timezone-parse-date): Match forms 1 and 2 first.
Richard M. Stallman <rms@gnu.org>
parents:
16942
diff
changeset
|
158 "\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]*\\'" date) |
2492168c1d05
(timezone-parse-date): Match forms 1 and 2 first.
Richard M. Stallman <rms@gnu.org>
parents:
16942
diff
changeset
|
159 ;; Styles: (1) and (2) without timezone |
2492168c1d05
(timezone-parse-date): Match forms 1 and 2 first.
Richard M. Stallman <rms@gnu.org>
parents:
16942
diff
changeset
|
160 (setq year 3 month 2 day 1 time 4 zone nil)) |
2492168c1d05
(timezone-parse-date): Match forms 1 and 2 first.
Richard M. Stallman <rms@gnu.org>
parents:
16942
diff
changeset
|
161 ((string-match |
9988
23ad7670da34
(timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents:
9770
diff
changeset
|
162 "\\([^ \t,]+\\),[ \t]+\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\(T[ \t]+\\|\\)\\([0-9]+\\)[ \t]*\\'" date) |
23ad7670da34
(timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents:
9770
diff
changeset
|
163 ;; Styles: (6) and (7) without timezone |
23ad7670da34
(timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents:
9770
diff
changeset
|
164 (setq year 6 month 3 day 2 time 4 zone nil)) |
23ad7670da34
(timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents:
9770
diff
changeset
|
165 ((string-match |
23ad7670da34
(timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents:
9770
diff
changeset
|
166 "\\([^ \t,]+\\),[ \t]+\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\(T[ \t]+\\|\\)\\([0-9]+\\)[ \t]*\\([-+a-zA-Z0-9]+\\)" date) |
23ad7670da34
(timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents:
9770
diff
changeset
|
167 ;; Styles: (6) and (7) with timezone and buggy timezone |
23ad7670da34
(timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents:
9770
diff
changeset
|
168 (setq year 6 month 3 day 2 time 4 zone 7)) |
23ad7670da34
(timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents:
9770
diff
changeset
|
169 ((string-match |
2908 | 170 "\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\([0-9]+\\)" date) |
171 ;; Styles: (3) without timezone | |
172 (setq year 4 month 1 day 2 time 3 zone nil)) | |
173 ((string-match | |
174 "\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\([-+a-zA-Z0-9]+\\)[ \t]+\\([0-9]+\\)" date) | |
4835
4324c797a9e3
(timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents:
4510
diff
changeset
|
175 ;; Styles: (3) with timezone |
2908 | 176 (setq year 5 month 1 day 2 time 3 zone 4)) |
177 ((string-match | |
178 "\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+\\)[ \t]*\\([-+a-zA-Z0-9]+\\)" date) | |
179 ;; Styles: (4) with timezone | |
180 (setq year 3 month 2 day 1 time 4 zone 5)) | |
4835
4324c797a9e3
(timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents:
4510
diff
changeset
|
181 ((string-match |
24697
4708ef6e279e
(timezone-parse-date): Recognize new format used in internet cookies.
Karl Heuer <kwzh@gnu.org>
parents:
24570
diff
changeset
|
182 "\\([0-9]+\\)-\\([A-Za-z]+\\)-\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9]+:[0-9]+\\)\\(\\.[0-9]+\\)?[ \t]+\\([-+a-zA-Z0-9]+\\)" date) |
4708ef6e279e
(timezone-parse-date): Recognize new format used in internet cookies.
Karl Heuer <kwzh@gnu.org>
parents:
24570
diff
changeset
|
183 ;; Styles: (5) with timezone. |
4708ef6e279e
(timezone-parse-date): Recognize new format used in internet cookies.
Karl Heuer <kwzh@gnu.org>
parents:
24570
diff
changeset
|
184 (setq year 3 month 2 day 1 time 4 zone 6)) |
4708ef6e279e
(timezone-parse-date): Recognize new format used in internet cookies.
Karl Heuer <kwzh@gnu.org>
parents:
24570
diff
changeset
|
185 ((string-match |
24570
d8a0152b923f
(timezone-parse-date): Corrected regexp for
Richard M. Stallman <rms@gnu.org>
parents:
24305
diff
changeset
|
186 "\\([0-9]+\\)-\\([A-Za-z]+\\)-\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9]+:[0-9]+\\)\\(\\.[0-9]+\\)?" date) |
4835
4324c797a9e3
(timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents:
4510
diff
changeset
|
187 ;; Styles: (5) without timezone. |
4324c797a9e3
(timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents:
4510
diff
changeset
|
188 (setq year 3 month 2 day 1 time 4 zone nil)) |
15614
6fb29f91d5ec
(timezone-parse-date): Handle ISO 8601 dates, so rmailsort does the right
Miles Bader <miles@gnu.org>
parents:
14169
diff
changeset
|
189 ((string-match |
32290
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
190 "\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9]+:[0-9]+\\)[ \t]+\\([-+a-zA-Z0-9]+\\)" date) |
15614
6fb29f91d5ec
(timezone-parse-date): Handle ISO 8601 dates, so rmailsort does the right
Miles Bader <miles@gnu.org>
parents:
14169
diff
changeset
|
191 ;; Styles: (8) with timezone. |
6fb29f91d5ec
(timezone-parse-date): Handle ISO 8601 dates, so rmailsort does the right
Miles Bader <miles@gnu.org>
parents:
14169
diff
changeset
|
192 (setq year 1 month 2 day 3 time 4 zone 5)) |
6fb29f91d5ec
(timezone-parse-date): Handle ISO 8601 dates, so rmailsort does the right
Miles Bader <miles@gnu.org>
parents:
14169
diff
changeset
|
193 ((string-match |
32290
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
194 "\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9]+\\)[ \t]+\\([-+a-zA-Z0-9:]+\\)" date) |
19190
7903b3fb5ec5
(timezone-parse-date): Handle additional style (9).
Richard M. Stallman <rms@gnu.org>
parents:
17627
diff
changeset
|
195 ;; Styles: (8) with timezone with a colon in it. |
7903b3fb5ec5
(timezone-parse-date): Handle additional style (9).
Richard M. Stallman <rms@gnu.org>
parents:
17627
diff
changeset
|
196 (setq year 1 month 2 day 3 time 4 zone 5)) |
7903b3fb5ec5
(timezone-parse-date): Handle additional style (9).
Richard M. Stallman <rms@gnu.org>
parents:
17627
diff
changeset
|
197 ((string-match |
15614
6fb29f91d5ec
(timezone-parse-date): Handle ISO 8601 dates, so rmailsort does the right
Miles Bader <miles@gnu.org>
parents:
14169
diff
changeset
|
198 "\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9]+:[0-9]+\\)" date) |
6fb29f91d5ec
(timezone-parse-date): Handle ISO 8601 dates, so rmailsort does the right
Miles Bader <miles@gnu.org>
parents:
14169
diff
changeset
|
199 ;; Styles: (8) without timezone. |
6fb29f91d5ec
(timezone-parse-date): Handle ISO 8601 dates, so rmailsort does the right
Miles Bader <miles@gnu.org>
parents:
14169
diff
changeset
|
200 (setq year 1 month 2 day 3 time 4 zone nil)) |
2908 | 201 ) |
25383 | 202 (when year |
203 (setq year (match-string year date)) | |
25577
8a541d5c62c0
(timezone-parse-date): Use < 69 not < 70 to distinguish 20YY from 19YY.
Richard M. Stallman <rms@gnu.org>
parents:
25552
diff
changeset
|
204 ;; Guess ambiguous years. Assume years < 69 don't predate the |
27493
005bb11b61bb
(timezone-fix-time): Window against 69 for two-digit years. Deal with
Dave Love <fx@gnu.org>
parents:
25577
diff
changeset
|
205 ;; Unix Epoch, so are 2000+. Three-digit years are assumed to |
005bb11b61bb
(timezone-fix-time): Window against 69 for two-digit years. Deal with
Dave Love <fx@gnu.org>
parents:
25577
diff
changeset
|
206 ;; be relative to 1900. |
25383 | 207 (if (< (length year) 4) |
208 (let ((y (string-to-int year))) | |
25577
8a541d5c62c0
(timezone-parse-date): Use < 69 not < 70 to distinguish 20YY from 19YY.
Richard M. Stallman <rms@gnu.org>
parents:
25552
diff
changeset
|
209 (if (< y 69) |
25383 | 210 (setq y (+ y 100))) |
211 (setq year (int-to-string (+ 1900 y))))) | |
212 (setq month | |
213 (if (= (aref date (+ (match-beginning month) 2)) ?-) | |
214 ;; Handle numeric months, spanning exactly two digits. | |
215 (substring date | |
216 (match-beginning month) | |
217 (+ (match-beginning month) 2)) | |
218 (let* ((string (substring date | |
219 (match-beginning month) | |
220 (+ (match-beginning month) 3))) | |
221 (monthnum | |
222 (cdr (assoc (upcase string) timezone-months-assoc)))) | |
223 (if monthnum | |
224 (int-to-string monthnum))))) | |
225 (setq day (match-string day date)) | |
226 (setq time (match-string time date))) | |
227 (if zone (setq zone (match-string zone date))) | |
2908 | 228 ;; Return a vector. |
16942
eca5dfcd481d
(timezone-parse-date): Treat unknown month name
Richard M. Stallman <rms@gnu.org>
parents:
16900
diff
changeset
|
229 (if (and year month) |
2908 | 230 (vector year month day time zone) |
25383 | 231 (vector "0" "0" "0" "0" nil)))) |
2908 | 232 |
233 (defun timezone-parse-time (time) | |
234 "Parse TIME (HH:MM:SS) and return a vector [hour minute second]. | |
235 Recognize HH:MM:SS, HH:MM, HHMMSS, HHMM." | |
236 (let ((time (or time "")) | |
25383 | 237 hour minute second) |
2908 | 238 (cond ((string-match "\\`\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)\\'" time) |
239 ;; HH:MM:SS | |
240 (setq hour 1 minute 2 second 3)) | |
241 ((string-match "\\`\\([0-9]+\\):\\([0-9]+\\)\\'" time) | |
242 ;; HH:MM | |
243 (setq hour 1 minute 2 second nil)) | |
244 ((string-match "\\`\\([0-9][0-9]\\)\\([0-9][0-9]\\)\\([0-9][0-9]\\)\\'" time) | |
245 ;; HHMMSS | |
246 (setq hour 1 minute 2 second 3)) | |
247 ((string-match "\\`\\([0-9][0-9]\\)\\([0-9][0-9]\\)\\'" time) | |
248 ;; HHMM | |
249 (setq hour 1 minute 2 second nil)) | |
250 ) | |
251 ;; Return [hour minute second] | |
252 (vector | |
25383 | 253 (if hour (match-string hour time) "0") |
254 (if minute (match-string minute time) "0") | |
255 (if second (match-string second time) "0")))) | |
2908 | 256 |
257 | |
258 ;; Miscellaneous | |
259 | |
260 (defun timezone-zone-to-minute (timezone) | |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
261 "Translate TIMEZONE to an integer minute offset from GMT. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
262 TIMEZONE can be a cons cell containing the output of current-time-zone, |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
263 or an integer of the form +-HHMM, or a time zone name." |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
264 (cond |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
265 ((consp timezone) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
266 (/ (car timezone) 60)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
267 (timezone |
2908 | 268 (progn |
269 (setq timezone | |
270 (or (cdr (assoc (upcase timezone) timezone-world-timezones)) | |
271 ;; +900 | |
272 timezone)) | |
273 (if (stringp timezone) | |
274 (setq timezone (string-to-int timezone))) | |
275 ;; Taking account of minute in timezone. | |
276 ;; HHMM -> MM | |
4510
10baf5e7550f
(timezone-fix-time, timezone-zone-to-minute): Simplify with `abs'
Paul Eggert <eggert@twinsun.com>
parents:
3505
diff
changeset
|
277 (let* ((abszone (abs timezone)) |
2908 | 278 (minutes (+ (* 60 (/ abszone 100)) (% abszone 100)))) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
279 (if (< timezone 0) (- minutes) minutes)))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
280 (t 0))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
281 |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
282 (defun timezone-time-from-absolute (date seconds) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
283 "Compute the UTC time equivalent to DATE at time SECONDS after midnight. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
284 Return a list suitable as an argument to current-time-zone, |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
285 or nil if the date cannot be thus represented. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
286 DATE is the number of days elapsed since the (imaginary) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
287 Gregorian date Sunday, December 31, 1 BC." |
16476
0bf8dab67f91
(timezone-time-from-absolute): Fix off-by-one
Paul Eggert <eggert@twinsun.com>
parents:
15632
diff
changeset
|
288 (let* ((current-time-origin 719163) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
289 ;; (timezone-absolute-from-gregorian 1 1 1970) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
290 (days (- date current-time-origin)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
291 (seconds-per-day (float 86400)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
292 (seconds (+ seconds (* days seconds-per-day))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
293 (current-time-arithmetic-base (float 65536)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
294 (hi (floor (/ seconds current-time-arithmetic-base))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
295 (hibase (* hi current-time-arithmetic-base)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
296 (lo (floor (- seconds hibase)))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
297 (and (< (abs (- seconds (+ hibase lo))) 2) ;; Check for integer overflow. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
298 (cons hi lo)))) |
2908 | 299 |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
300 (defun timezone-time-zone-from-absolute (date seconds) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
301 "Compute the local time zone for DATE at time SECONDS after midnight. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
302 Return a list in the same format as current-time-zone's result, |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
303 or nil if the local time zone could not be computed. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
304 DATE is the number of days elapsed since the (imaginary) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
305 Gregorian date Sunday, December 31, 1 BC." |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
306 (and (fboundp 'current-time-zone) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
307 (let ((utc-time (timezone-time-from-absolute date seconds))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
308 (and utc-time |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
309 (let ((zone (current-time-zone utc-time))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
310 (and (car zone) zone)))))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
311 |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
312 (defun timezone-fix-time (date local timezone) |
3505 | 313 "Convert DATE (default timezone LOCAL) to YYYY-MM-DD-HH-MM-SS-ZONE vector. |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
314 If LOCAL is nil, it is assumed to be GMT. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
315 If TIMEZONE is nil, use the local time zone." |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
316 (let* ((date (timezone-parse-date date)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
317 (year (string-to-int (aref date 0))) |
27493
005bb11b61bb
(timezone-fix-time): Window against 69 for two-digit years. Deal with
Dave Love <fx@gnu.org>
parents:
25577
diff
changeset
|
318 (year (cond ((< year 69) |
10255
d4119f1137f9
(timezone-fix-time): For year values < 50, add 2000.
Richard M. Stallman <rms@gnu.org>
parents:
9988
diff
changeset
|
319 (+ year 2000)) |
d4119f1137f9
(timezone-fix-time): For year values < 50, add 2000.
Richard M. Stallman <rms@gnu.org>
parents:
9988
diff
changeset
|
320 ((< year 100) |
d4119f1137f9
(timezone-fix-time): For year values < 50, add 2000.
Richard M. Stallman <rms@gnu.org>
parents:
9988
diff
changeset
|
321 (+ year 1900)) |
27493
005bb11b61bb
(timezone-fix-time): Window against 69 for two-digit years. Deal with
Dave Love <fx@gnu.org>
parents:
25577
diff
changeset
|
322 ((< year 1000) ; possible 3-digit years. |
005bb11b61bb
(timezone-fix-time): Window against 69 for two-digit years. Deal with
Dave Love <fx@gnu.org>
parents:
25577
diff
changeset
|
323 (+ year 1900)) |
10255
d4119f1137f9
(timezone-fix-time): For year values < 50, add 2000.
Richard M. Stallman <rms@gnu.org>
parents:
9988
diff
changeset
|
324 (t year))) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
325 (month (string-to-int (aref date 1))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
326 (day (string-to-int (aref date 2))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
327 (time (timezone-parse-time (aref date 3))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
328 (hour (string-to-int (aref time 0))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
329 (minute (string-to-int (aref time 1))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
330 (second (string-to-int (aref time 2))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
331 (local (or (aref date 4) local)) ;Use original if defined |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
332 (timezone |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
333 (or timezone |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
334 (timezone-time-zone-from-absolute |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
335 (timezone-absolute-from-gregorian month day year) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
336 (+ second (* 60 (+ minute (* 60 hour))))))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
337 (diff (- (timezone-zone-to-minute timezone) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
338 (timezone-zone-to-minute local))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
339 (minute (+ minute diff)) |
4510
10baf5e7550f
(timezone-fix-time, timezone-zone-to-minute): Simplify with `abs'
Paul Eggert <eggert@twinsun.com>
parents:
3505
diff
changeset
|
340 (hour-fix (floor minute 60))) |
2908 | 341 (setq hour (+ hour hour-fix)) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
342 (setq minute (- minute (* 60 hour-fix))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
343 ;; HOUR may be larger than 24 or smaller than 0. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
344 (cond ((<= 24 hour) ;24 -> 00 |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
345 (setq hour (- hour 24)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
346 (setq day (1+ day)) |
32290
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
347 (when (< (timezone-last-day-of-month month year) day) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
348 (setq month (1+ month)) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
349 (setq day 1) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
350 (when (< 12 month) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
351 (setq month 1) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
352 (setq year (1+ year))))) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
353 ((> 0 hour) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
354 (setq hour (+ hour 24)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
355 (setq day (1- day)) |
32290
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
356 (when (> 1 day) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
357 (setq month (1- month)) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
358 (when (> 1 month) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
359 (setq month 12) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
360 (setq year (1- year))) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
361 (setq day (timezone-last-day-of-month month year))))) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
362 (vector year month day hour minute second timezone))) |
2908 | 363 |
364 ;; Partly copied from Calendar program by Edward M. Reingold. | |
365 ;; Thanks a lot. | |
366 | |
367 (defun timezone-last-day-of-month (month year) | |
368 "The last day in MONTH during YEAR." | |
369 (if (and (= month 2) (timezone-leap-year-p year)) | |
370 29 | |
371 (aref [31 28 31 30 31 30 31 31 30 31 30 31] (1- month)))) | |
372 | |
373 (defun timezone-leap-year-p (year) | |
374 "Returns t if YEAR is a Gregorian leap year." | |
375 (or (and (zerop (% year 4)) | |
376 (not (zerop (% year 100)))) | |
377 (zerop (% year 400)))) | |
2910
74b7994f2d20
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2908
diff
changeset
|
378 |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
379 (defun timezone-day-number (month day year) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
380 "Return the day number within the year of the date month/day/year." |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
381 (let ((day-of-year (+ day (* 31 (1- month))))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
382 (if (> month 2) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
383 (progn |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
384 (setq day-of-year (- day-of-year (/ (+ 23 (* 4 month)) 10))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
385 (if (timezone-leap-year-p year) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
386 (setq day-of-year (1+ day-of-year))))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
387 day-of-year)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
388 |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
389 (defun timezone-absolute-from-gregorian (month day year) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
390 "The number of days between the Gregorian date 12/31/1 BC and month/day/year. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
391 The Gregorian date Sunday, December 31, 1 BC is imaginary." |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
392 (+ (timezone-day-number month day year);; Days this year |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
393 (* 365 (1- year));; + Days in prior years |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
394 (/ (1- year) 4);; + Julian leap years |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
395 (- (/ (1- year) 100));; - century years |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
396 (/ (1- year) 400)));; + Gregorian leap years |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
397 |
25383 | 398 (provide 'timezone) |
399 | |
2910
74b7994f2d20
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2908
diff
changeset
|
400 ;;; timezone.el ends here |