annotate lisp/timezone.el @ 13883:a4eef7470b6b

(ls-lisp-support-shell-wildcards): New variable. (insert-directory): Convert the filename wildcard to an equivalent Emacs regexp, when `ls-lisp-support-shell-wildcards' is non-nil. Handle file patterns like "/foo*/" as if it were "/foo*", like the shell would. Print zero total for files whose total size is exactly zero (in particular, for no files at all). Say "No match" when no files match the given wildcard. (ls-lisp-format): Make directory listing format more like POSIX ls.
author Richard M. Stallman <rms@gnu.org>
date Thu, 28 Dec 1995 23:36:50 +0000
parents 84acc3adcd63
children 83f275dcd93a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12482
diff changeset
1 ;;; timezone.el --- time zone package for GNU Emacs
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
2910
74b7994f2d20 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2908
diff changeset
3 ;; Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
74b7994f2d20 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2908
diff changeset
4
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12482
diff changeset
5 ;; Author: Masanobu Umeda
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12482
diff changeset
6 ;; Maintainer: umerin@mse.kyutech.ac.jp
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 12482
diff changeset
7 ;; Keywords: news
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; any later version.
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;;; Code:
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 (provide 'timezone)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 (defvar timezone-world-timezones
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 '(("PST" . -800)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ("PDT" . -700)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ("MST" . -700)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ("MDT" . -600)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ("CST" . -600)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ("CDT" . -500)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ("EST" . -500)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ("EDT" . -400)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ("AST" . -400) ;by <clamen@CS.CMU.EDU>
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ("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
40 ("UT" . +000)
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ("GMT" . +000)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ("BST" . +100)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ("MET" . +100)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ("EET" . +200)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ("JST" . +900)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ("GMT+1" . +100) ("GMT+2" . +200) ("GMT+3" . +300)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ("GMT+4" . +400) ("GMT+5" . +500) ("GMT+6" . +600)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ("GMT+7" . +700) ("GMT+8" . +800) ("GMT+9" . +900)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ("GMT+10" . +1000) ("GMT+11" . +1100) ("GMT+12" . +1200) ("GMT+13" . +1300)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ("GMT-1" . -100) ("GMT-2" . -200) ("GMT-3" . -300)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ("GMT-4" . -400) ("GMT-5" . -500) ("GMT-6" . -600)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ("GMT-7" . -700) ("GMT-8" . -800) ("GMT-9" . -900)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ("GMT-10" . -1000) ("GMT-11" . -1100) ("GMT-12" . -1200))
3494
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
54 "*Time differentials of timezone from GMT in +-HHMM form.
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
55 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
56 because time zone names are ambiguous in practice.
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
57 Use `current-time-zone' instead.")
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 (defvar timezone-months-assoc
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 '(("JAN" . 1)("FEB" . 2)("MAR" . 3)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ("APR" . 4)("MAY" . 5)("JUN" . 6)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ("JUL" . 7)("AUG" . 8)("SEP" . 9)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ("OCT" . 10)("NOV" . 11)("DEC" . 12))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 "Alist of first three letters of a month and its numerical representation.")
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 (defun timezone-make-date-arpa-standard (date &optional local timezone)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 "Convert DATE to an arpanet standard date.
3494
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
68 Optional 1st argument LOCAL specifies the default local timezone of the DATE;
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
69 if nil, GMT is assumed.
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
70 Optional 2nd argument TIMEZONE specifies a time zone to be represented in;
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
71 if nil, the local time zone is assumed."
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
72 (let ((new (timezone-fix-time date local timezone)))
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 (timezone-make-arpa-date (aref new 0) (aref new 1) (aref new 2)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 (timezone-make-time-string
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 (aref new 3) (aref new 4) (aref new 5))
3494
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
76 (aref new 6))
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 (defun timezone-make-date-sortable (date &optional local timezone)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 "Convert DATE to a sortable date string.
3494
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
81 Optional 1st argument LOCAL specifies the default local timezone of the DATE;
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
82 if nil, GMT is assumed.
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
83 Optional 2nd argument TIMEZONE specifies a timezone to be represented in;
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
84 if nil, the local time zone is assumed."
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
85 (let ((new (timezone-fix-time date local timezone)))
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 (timezone-make-sortable-date (aref new 0) (aref new 1) (aref new 2)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 (timezone-make-time-string
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 (aref new 3) (aref new 4) (aref new 5)))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 ;;
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 ;; Parsers and Constructors of Date and Time
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 ;;
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 (defun timezone-make-arpa-date (year month day time &optional timezone)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 "Make arpanet standard date string from YEAR, MONTH, DAY, and TIME.
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 Optional argument TIMEZONE specifies a time zone."
3494
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
99 (let ((zone
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
100 (if (listp timezone)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
101 (let* ((m (timezone-zone-to-minute timezone))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
102 (absm (if (< m 0) (- m) m)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
103 (format "%c%02d%02d"
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
104 (if (< m 0) ?- ?+) (/ absm 60) (% absm 60)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
105 timezone)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
106 (format "%02d %s %04d %s %s"
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
107 day
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
108 (capitalize (car (rassq month timezone-months-assoc)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
109 year
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
110 time
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
111 zone)))
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 (defun timezone-make-sortable-date (year month day time)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 "Make sortable date string from YEAR, MONTH, DAY, and TIME."
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 (format "%4d%02d%02d%s"
3494
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
116 year month day time))
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 (defun timezone-make-time-string (hour minute second)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 "Make time string from HOUR, MINUTE, and SECOND."
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 (format "%02d:%02d:%02d" hour minute second))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 (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
123 "Parse DATE and return a vector [YEAR MONTH DAY TIME TIMEZONE].
4324c797a9e3 (timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents: 4510
diff changeset
124 19 is prepended to year if necessary. Timezone may be nil if nothing.
4324c797a9e3 (timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents: 4510
diff changeset
125 Understands the following styles:
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 (1) 14 Apr 89 03:20[:12] [GMT]
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 (2) Fri, 17 Mar 89 4:01[:33] [GMT]
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 (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
129 (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
130 (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
131 (6) Thu, 11 Apr 16:17:12 91 [MET]
23ad7670da34 (timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents: 9770
diff changeset
132 (7) Mon, 6 Jul 16:47:20 T 1992 [MET]"
12482
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
133 ;; Get rid of any text properties.
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
134 (and (stringp date)
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
135 (or (text-properties-at 0 date)
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
136 (next-property-change 0 date))
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
137 (setq date (copy-sequence date))
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
138 (set-text-properties 0 (length date) nil date))
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 (let ((date (or date ""))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 (year nil)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (month nil)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (day nil)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 (time nil)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 (zone nil)) ;This may be nil.
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 (cond ((string-match
9988
23ad7670da34 (timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents: 9770
diff changeset
146 "\\([^ \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
147 ;; 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
148 (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
149 ((string-match
23ad7670da34 (timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents: 9770
diff changeset
150 "\\([^ \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
151 ;; 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
152 (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
153 ((string-match
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 "\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]*\\'" date)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 ;; Styles: (1) and (2) without timezone
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 (setq year 3 month 2 day 1 time 4 zone nil))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 ((string-match
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 "\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]*\\([-+a-zA-Z0-9]+\\)" date)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 ;; Styles: (1) and (2) with timezone and buggy timezone
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 (setq year 3 month 2 day 1 time 4 zone 5))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 ((string-match
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 "\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\([0-9]+\\)" date)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 ;; Styles: (3) without timezone
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 (setq year 4 month 1 day 2 time 3 zone nil))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 ((string-match
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 "\\([^ \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
167 ;; Styles: (3) with timezone
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 (setq year 5 month 1 day 2 time 3 zone 4))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 ((string-match
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 "\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+\\)[ \t]*\\([-+a-zA-Z0-9]+\\)" date)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 ;; Styles: (4) with timezone
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 (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
173 ((string-match
4324c797a9e3 (timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents: 4510
diff changeset
174 "\\([0-9]+\\)-\\([A-Za-z]+\\)-\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9]+:[0-9]+\\)\\.[0-9]+" date)
4324c797a9e3 (timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents: 4510
diff changeset
175 ;; Styles: (5) without timezone.
4324c797a9e3 (timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents: 4510
diff changeset
176 (setq year 3 month 2 day 1 time 4 zone nil))
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 )
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (if year
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 (progn
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 (setq year
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 (substring date (match-beginning year) (match-end year)))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 ;; It is now Dec 1992. 8 years before the end of the World.
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 (if (< (length year) 4)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 (setq year (concat "19" (substring year -2 nil))))
12482
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
185 (let ((string (substring date
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
186 (match-beginning month)
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
187 (+ (match-beginning month) 3))))
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
188 (setq month
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
189 (int-to-string
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
190 (cdr (assoc (upcase string) timezone-months-assoc)))))
3f4cd64a4730 (timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents: 10255
diff changeset
191
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 (setq day
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 (substring date (match-beginning day) (match-end day)))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 (setq time
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 (substring date (match-beginning time) (match-end time)))))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 (if zone
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 (setq zone
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 (substring date (match-beginning zone) (match-end zone))))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 ;; Return a vector.
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 (if year
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (vector year month day time zone)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 (vector "0" "0" "0" "0" nil))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 ))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 (defun timezone-parse-time (time)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 "Parse TIME (HH:MM:SS) and return a vector [hour minute second].
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 Recognize HH:MM:SS, HH:MM, HHMMSS, HHMM."
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 (let ((time (or time ""))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 (hour nil)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 (minute nil)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (second nil))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 (cond ((string-match "\\`\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)\\'" time)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 ;; HH:MM:SS
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 (setq hour 1 minute 2 second 3))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 ((string-match "\\`\\([0-9]+\\):\\([0-9]+\\)\\'" time)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 ;; HH:MM
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 (setq hour 1 minute 2 second nil))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 ((string-match "\\`\\([0-9][0-9]\\)\\([0-9][0-9]\\)\\([0-9][0-9]\\)\\'" time)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 ;; HHMMSS
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 (setq hour 1 minute 2 second 3))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 ((string-match "\\`\\([0-9][0-9]\\)\\([0-9][0-9]\\)\\'" time)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 ;; HHMM
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 (setq hour 1 minute 2 second nil))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 )
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 ;; Return [hour minute second]
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 (vector
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 (if hour
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 (substring time (match-beginning hour) (match-end hour)) "0")
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 (if minute
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 (substring time (match-beginning minute) (match-end minute)) "0")
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 (if second
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 (substring time (match-beginning second) (match-end second)) "0"))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 ))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 ;; Miscellaneous
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 (defun timezone-zone-to-minute (timezone)
3494
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
239 "Translate TIMEZONE to an integer minute offset from GMT.
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
240 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
241 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
242 (cond
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
243 ((consp timezone)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
244 (/ (car timezone) 60))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
245 (timezone
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 (progn
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 (setq timezone
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 (or (cdr (assoc (upcase timezone) timezone-world-timezones))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 ;; +900
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 timezone))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 (if (stringp timezone)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 (setq timezone (string-to-int timezone)))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 ;; Taking account of minute in timezone.
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 ;; HHMM -> MM
4510
10baf5e7550f (timezone-fix-time, timezone-zone-to-minute): Simplify with `abs'
Paul Eggert <eggert@twinsun.com>
parents: 3505
diff changeset
255 (let* ((abszone (abs timezone))
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 (minutes (+ (* 60 (/ abszone 100)) (% abszone 100))))
3494
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
257 (if (< timezone 0) (- minutes) minutes))))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
258 (t 0)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
259
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
260 (defun timezone-time-from-absolute (date seconds)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
261 "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
262 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
263 or nil if the date cannot be thus represented.
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
264 DATE is the number of days elapsed since the (imaginary)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
265 Gregorian date Sunday, December 31, 1 BC."
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
266 (let* ((current-time-origin 719162)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
267 ;; (timezone-absolute-from-gregorian 1 1 1970)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
268 (days (- date current-time-origin))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
269 (seconds-per-day (float 86400))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
270 (seconds (+ seconds (* days seconds-per-day)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
271 (current-time-arithmetic-base (float 65536))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
272 (hi (floor (/ seconds current-time-arithmetic-base)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
273 (hibase (* hi current-time-arithmetic-base))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
274 (lo (floor (- seconds hibase))))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
275 (and (< (abs (- seconds (+ hibase lo))) 2) ;; Check for integer overflow.
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
276 (cons hi lo))))
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277
3494
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
278 (defun timezone-time-zone-from-absolute (date seconds)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
279 "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
280 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
281 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
282 DATE is the number of days elapsed since the (imaginary)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
283 Gregorian date Sunday, December 31, 1 BC."
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
284 (and (fboundp 'current-time-zone)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
285 (let ((utc-time (timezone-time-from-absolute date seconds)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
286 (and utc-time
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
287 (let ((zone (current-time-zone utc-time)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
288 (and (car zone) zone))))))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
289
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
290 (defun timezone-fix-time (date local timezone)
3505
1489eda1a90b entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 3494
diff changeset
291 "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
292 If LOCAL is nil, it is assumed to be GMT.
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
293 If TIMEZONE is nil, use the local time zone."
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
294 (let* ((date (timezone-parse-date date))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
295 (year (string-to-int (aref date 0)))
10255
d4119f1137f9 (timezone-fix-time): For year values < 50, add 2000.
Richard M. Stallman <rms@gnu.org>
parents: 9988
diff changeset
296 (year (cond ((< year 50)
d4119f1137f9 (timezone-fix-time): For year values < 50, add 2000.
Richard M. Stallman <rms@gnu.org>
parents: 9988
diff changeset
297 (+ year 2000))
d4119f1137f9 (timezone-fix-time): For year values < 50, add 2000.
Richard M. Stallman <rms@gnu.org>
parents: 9988
diff changeset
298 ((< year 100)
d4119f1137f9 (timezone-fix-time): For year values < 50, add 2000.
Richard M. Stallman <rms@gnu.org>
parents: 9988
diff changeset
299 (+ year 1900))
d4119f1137f9 (timezone-fix-time): For year values < 50, add 2000.
Richard M. Stallman <rms@gnu.org>
parents: 9988
diff changeset
300 (t year)))
3494
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
301 (month (string-to-int (aref date 1)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
302 (day (string-to-int (aref date 2)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
303 (time (timezone-parse-time (aref date 3)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
304 (hour (string-to-int (aref time 0)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
305 (minute (string-to-int (aref time 1)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
306 (second (string-to-int (aref time 2)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
307 (local (or (aref date 4) local)) ;Use original if defined
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
308 (timezone
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
309 (or timezone
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
310 (timezone-time-zone-from-absolute
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
311 (timezone-absolute-from-gregorian month day year)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
312 (+ second (* 60 (+ minute (* 60 hour)))))))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
313 (diff (- (timezone-zone-to-minute timezone)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
314 (timezone-zone-to-minute local)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
315 (minute (+ minute diff))
4510
10baf5e7550f (timezone-fix-time, timezone-zone-to-minute): Simplify with `abs'
Paul Eggert <eggert@twinsun.com>
parents: 3505
diff changeset
316 (hour-fix (floor minute 60)))
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 (setq hour (+ hour hour-fix))
3494
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
318 (setq minute (- minute (* 60 hour-fix)))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
319 ;; HOUR may be larger than 24 or smaller than 0.
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
320 (cond ((<= 24 hour) ;24 -> 00
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
321 (setq hour (- hour 24))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
322 (setq day (1+ day))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
323 (if (< (timezone-last-day-of-month month year) day)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
324 (progn
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
325 (setq month (1+ month))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
326 (setq day 1)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
327 (if (< 12 month)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
328 (progn
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
329 (setq month 1)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
330 (setq year (1+ year))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
331 ))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
332 )))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
333 ((> 0 hour)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
334 (setq hour (+ hour 24))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
335 (setq day (1- day))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
336 (if (> 1 day)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
337 (progn
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
338 (setq month (1- month))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
339 (if (> 1 month)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
340 (progn
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
341 (setq month 12)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
342 (setq year (1- year))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
343 ))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
344 (setq day (timezone-last-day-of-month month year))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
345 )))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
346 )
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
347 (vector year month day hour minute second timezone)))
2908
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 ;; Partly copied from Calendar program by Edward M. Reingold.
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 ;; Thanks a lot.
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 (defun timezone-last-day-of-month (month year)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 "The last day in MONTH during YEAR."
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 (if (and (= month 2) (timezone-leap-year-p year))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 29
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (aref [31 28 31 30 31 30 31 31 30 31 30 31] (1- month))))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 (defun timezone-leap-year-p (year)
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 "Returns t if YEAR is a Gregorian leap year."
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 (or (and (zerop (% year 4))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 (not (zerop (% year 100))))
fea2f9ef375b Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 (zerop (% year 400))))
2910
74b7994f2d20 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2908
diff changeset
363
3494
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
364 (defun timezone-day-number (month day year)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
365 "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
366 (let ((day-of-year (+ day (* 31 (1- month)))))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
367 (if (> month 2)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
368 (progn
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
369 (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
370 (if (timezone-leap-year-p year)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
371 (setq day-of-year (1+ day-of-year)))))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
372 day-of-year))
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
373
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
374 (defun timezone-absolute-from-gregorian (month day year)
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
375 "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
376 The Gregorian date Sunday, December 31, 1 BC is imaginary."
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
377 (+ (timezone-day-number month day year);; Days this year
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
378 (* 365 (1- year));; + Days in prior years
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
379 (/ (1- year) 4);; + Julian leap years
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
380 (- (/ (1- year) 100));; - century years
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
381 (/ (1- year) 400)));; + Gregorian leap years
ddc7da3f66d1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2910
diff changeset
382
2910
74b7994f2d20 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2908
diff changeset
383 ;;; timezone.el ends here