Mercurial > emacs
annotate lisp/timezone.el @ 99501:e3acb52d33e1
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-yank): Make any prefix force normal yanking.
Suppress folding if text would be swallowed into a folded
subtree.
(org-yank-folded-subtrees, org-yank): Docstring updates.
* org-agenda.el (org-agenda-compare-effort): Treat no effort
defined as 0.
* org-exp.el (org-export-language-setup): Add Catalan and
Esperanto language entries.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-refile): Allow refiling of entire regions.
* org-clock.el (org-clock-time%): New function.
* org.el (org-entry-get, org-entry-delete): Use safer regexps to
retrieve property values.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-agenda-list): Handle the value `only' of
org-agenda-show-log'.
(org-agenda-log-mode): Interpret a double prefix arg.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-export-html-footnotes-section): New variable.
(org-export-as-html): Use `org-export-html-footnotes-section' to
insert the footnotes.
(org-export-language-setup): Add "Footnotes" to language words.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-yank): Fix bug when not inserting a subtree.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-vm.el (org-vm-follow-link): Call `vm-preview-current-message'
instead of `vm-beginning-of-message'.
* org.el (org-make-link-regexps): Make sure that links to gnus can
contain brackets.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-attach.el (org-attach-dir): Remove duplicate ID creation
code.
* org-id.el (org-id-new): Use `org-trim' to extract the uuid from
shell output.
* org.el (org-link-abbrev-alist): Improve customization type.
* org-attach.el (org-attach-expand-link, org-attach-expand): New
functions.
* org-agenda.el (org-agenda-get-progress): Renamed from
`org-get-closed'. Implement searching for state changes as well.
(org-agenda-log-mode-items): New option.
(org-agenda-log-mode): New option prefix argument, interpreted as
request to show all possible progress info.
(org-agenda-get-day-entries): Call `org-get-progress' instead of
`org-get-closed'.
(org-agenda-set-mode-name): Handle the more complex log mode
settings.
(org-get-closed): New alias, pointing to `org-get-progress'.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-file-apps-defaults-gnu)
(org-file-apps-defaults-macosx)
(org-file-apps-defaults-windowsnt): Add an entry defining the
system command.
(org-file-apps): Allow `system' as key and value.
(org-open-at-point): Explain the effect of a double prefix arg.
(org-open-file): If the argument `in-emacs' is (16),
i.e. corresponding to a double prefix argument, try to open the
file externally.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-insert-link): Abbreviate absolute files names in
links. Also, fix a bug in which the double C-u prefix would not
be honored.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-insert-heading): If buffer does not end with a
newline, add one if necessary to insert headline correctly.
* org-exp.el (org-export-as-html): Make sure that <hr/> is between
paragraphs, not inside.
* org.el (org-todo): Quote
`org-agenda-headline-snapshot-before-repeat'.
* org-exp.el (org-export-as-html): Fully process link descriptions.
(org-export-html-format-desc): New function.
(org-export-as-html): Collect footnotes into the correct basket.
(org-html-protect): No longer protect quotations marks here, this
goes wrong.
* org-agenda.el (org-agenda-remove-marked-text): Bind variable
BEG.
* org-compat.el (org-fit-window-to-buffer): New function (not
really, a preliminary and incomplete version was present earlier,
but not used).
* org.el (org-fast-todo-selection, org-fast-tag-selection): Use
`org-fit-window-to-buffer'.
* org-exp.el (org-export): Use `org-fit-window-to-buffer'.
* org-agenda.el (org-agenda-get-restriction-and-command)
(org-fit-agenda-window, org-agenda-convert-date): Use
`org-fit-window-to-buffer'.
* org-exp.el (org-export-as-html): Process href links through
`org-export-html-format-href'.
(org-export-html-format-href): New function.
* org-agenda.el (org-agenda-todo): Update only the current
headline if this is a repeated TODO, marked done for today.
(org-agenda-change-all-lines): New argument JUST-THIS, to change
only the current line.
* org.el (org-todo): Take a snapshot of the headline if the
repeater might change it.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org-publish.el (org-publish-find-title): Remove buffers visited
only for extracting the title.
* org-exp.el (org-export-html-style)
(org-export-html-style-default): Mark style definitions as
unparsed CDATA.
* org-publish.el (org-publish-validate-link): Function
re-introduced.
2008-11-12 Charles Sebold <csebold@gmail.com>
* org-plot.el (org-plot/add-options-to-plist): Supports timefmt
property.
(org-plot-quote-timestamp-field): New function.
(org-plot-quote-tsv-field): Call timestamp field function when
necessary rather than just quoting as a string.
(org-plot/gnuplot-to-data): Pass in timefmt property.
(org-plot/gnuplot-script): Supports timefmt property.
(org-plot/gnuplot): Checks for timestamp column before checking
for text index column.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-insert-heading): Improve behavior with hidden subtrees.
* org-publish.el (org-publish-org-index): Create a section in the
index file.
(org-publish-org-index): Stop linking to directories.
* org.el (org-emphasis-alist): Use span instead of <u> to
underline text.
* org-exp.el (org-export-as-html): Make sure <p> is closed before
<pre> sections.
2008-11-12 Sebastian Rose <sebastian_rose@gmx.de>
* org-jsinfo.el (org-infojs-template): Remove language attribute
from script tag.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org-agenda.el (org-agenda-remove-marked-text): New function.
(org-agenda-mark-filtered-text)
(org-agenda-unmark-filtered-text): New functions.
(org-write-agenda): Remove fltered text.
* org.el (org-make-tags-matcher): Give access to TODO "property"
without speed penalty.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-link-frame-setup): Add `org-gnus-no-new-news' as an
option.
(org-store-link-props): Make sure adding to the plist works
correctly.
* org-gnus.el (org-gnus-no-new-news): New function.
(org-gnus-follow-link): Allow the article ID to be a message-id,
in addition to allowing article numbers. Message IDs make much
more roubust links.
(org-gnus-store-link): Use message-id to create link.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-emphasize): Reverse the selection array.
(org-emphasis-alist): Set <code> tags for the verbatim
environment.
* org-remember.el (org-remember-handler): Fix bug with
prefix-related changing of the note storage target.
* org-exp.el (org-print-icalendar-entries): Make the exported
priorities compatible with RFC 2445.
* org-clock.el (org-clock-save): Insert time stamp without
dependence on time-stamp.el.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el ("saveplace"): If saveplace puts point into an invisible
location, make it visible.
(org-make-tags-matcher): Allow inactive time stamps in time
comparisons.
(org-yank-adjusted-subtrees): New option.
(org-yank): Incorporate adjusting trees.
(org-paste-subtree): New argument FOR-YANK which will cause
insertion at point without backing up over white lines, and leave
point at the end of the inserted text. Also if the cursor is
at the beginning of a headline, use the same level or the inserted
tree.
* org-publish.el (org-publish-get-base-files-1): Deal correctly
with broken symlinks
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org-exp.el (org-export-select-tags, org-get-current-options):
Fix typo.
author | Carsten Dominik <dominik@science.uva.nl> |
---|---|
date | Wed, 12 Nov 2008 08:01:06 +0000 |
parents | 225286546090 |
children | a9dc0e7c3f2b |
rev | line source |
---|---|
13337 | 1 ;;; timezone.el --- time zone package for GNU Emacs |
2908 | 2 |
74442 | 3 ;; Copyright (C) 1990, 1991, 1992, 1993, 1996, 1999, 2001, 2002, 2003, |
79721 | 4 ;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
2910
74b7994f2d20
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2908
diff
changeset
|
5 |
13337 | 6 ;; Author: Masanobu Umeda |
7 ;; Maintainer: umerin@mse.kyutech.ac.jp | |
8 ;; Keywords: news | |
2908 | 9 |
10 ;; This file is part of GNU Emacs. | |
11 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
12 ;; GNU Emacs is free software: you can redistribute it and/or modify |
2908 | 13 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
14 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
15 ;; (at your option) any later version. |
2908 | 16 |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
2908 | 24 |
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
32290
diff
changeset
|
25 ;;; Commentary: |
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
32290
diff
changeset
|
26 |
2908 | 27 ;;; Code: |
28 | |
29 (defvar timezone-world-timezones | |
30 '(("PST" . -800) | |
31 ("PDT" . -700) | |
32 ("MST" . -700) | |
33 ("MDT" . -600) | |
34 ("CST" . -600) | |
35 ("CDT" . -500) | |
36 ("EST" . -500) | |
37 ("EDT" . -400) | |
38 ("AST" . -400) ;by <clamen@CS.CMU.EDU> | |
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 | 41 ("GMT" . +000) |
42 ("BST" . +100) | |
43 ("MET" . +100) | |
44 ("EET" . +200) | |
45 ("JST" . +900) | |
46 ("GMT+1" . +100) ("GMT+2" . +200) ("GMT+3" . +300) | |
47 ("GMT+4" . +400) ("GMT+5" . +500) ("GMT+6" . +600) | |
48 ("GMT+7" . +700) ("GMT+8" . +800) ("GMT+9" . +900) | |
49 ("GMT+10" . +1000) ("GMT+11" . +1100) ("GMT+12" . +1200) ("GMT+13" . +1300) | |
50 ("GMT-1" . -100) ("GMT-2" . -200) ("GMT-3" . -300) | |
51 ("GMT-4" . -400) ("GMT-5" . -500) ("GMT-6" . -600) | |
52 ("GMT-7" . -700) ("GMT-8" . -800) ("GMT-9" . -900) | |
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 | 58 |
59 (defvar timezone-months-assoc | |
60 '(("JAN" . 1)("FEB" . 2)("MAR" . 3) | |
61 ("APR" . 4)("MAY" . 5)("JUN" . 6) | |
62 ("JUL" . 7)("AUG" . 8)("SEP" . 9) | |
63 ("OCT" . 10)("NOV" . 11)("DEC" . 12)) | |
64 "Alist of first three letters of a month and its numerical representation.") | |
65 | |
66 (defun timezone-make-date-arpa-standard (date &optional local timezone) | |
67 "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
|
68 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
|
69 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
|
70 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
|
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 | 73 (timezone-make-arpa-date (aref new 0) (aref new 1) (aref new 2) |
74 (timezone-make-time-string | |
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 | 77 )) |
78 | |
79 (defun timezone-make-date-sortable (date &optional local timezone) | |
80 "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
|
81 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
|
82 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
|
83 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
|
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 | 86 (timezone-make-sortable-date (aref new 0) (aref new 1) (aref new 2) |
87 (timezone-make-time-string | |
88 (aref new 3) (aref new 4) (aref new 5))) | |
89 )) | |
90 | |
91 | |
92 ;; | |
93 ;; Parsers and Constructors of Date and Time | |
94 ;; | |
95 | |
96 (defun timezone-make-arpa-date (year month day time &optional timezone) | |
97 "Make arpanet standard date string from YEAR, MONTH, DAY, and TIME. | |
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 | 112 |
113 (defun timezone-make-sortable-date (year month day time) | |
114 "Make sortable date string from YEAR, MONTH, DAY, and TIME." | |
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 | 117 |
118 (defun timezone-make-time-string (hour minute second) | |
119 "Make time string from HOUR, MINUTE, and SECOND." | |
120 (format "%02d:%02d:%02d" hour minute second)) | |
121 | |
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]. |
32290
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
124 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
|
125 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
|
126 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
|
127 |
4835
4324c797a9e3
(timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents:
4510
diff
changeset
|
128 Understands the following styles: |
2908 | 129 (1) 14 Apr 89 03:20[:12] [GMT] |
130 (2) Fri, 17 Mar 89 4:01[:33] [GMT] | |
131 (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
|
132 (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
|
133 (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
|
134 (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
|
135 (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
|
136 (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
|
137 (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
|
138 ;; Get rid of any text properties. |
12482
3f4cd64a4730
(timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents:
10255
diff
changeset
|
139 (and (stringp date) |
3f4cd64a4730
(timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents:
10255
diff
changeset
|
140 (or (text-properties-at 0 date) |
3f4cd64a4730
(timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents:
10255
diff
changeset
|
141 (next-property-change 0 date)) |
3f4cd64a4730
(timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents:
10255
diff
changeset
|
142 (setq date (copy-sequence date)) |
3f4cd64a4730
(timezone-parse-date): Ignore text properties.
Richard M. Stallman <rms@gnu.org>
parents:
10255
diff
changeset
|
143 (set-text-properties 0 (length date) nil date)) |
2908 | 144 (let ((date (or date "")) |
145 (year nil) | |
146 (month nil) | |
147 (day nil) | |
148 (time nil) | |
149 (zone nil)) ;This may be nil. | |
150 (cond ((string-match | |
64210
3e480e2df335
(timezone-parse-date): Changed first regexp
Richard M. Stallman <rms@gnu.org>
parents:
64091
diff
changeset
|
151 "\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\([-+a-zA-Z0-9]+\\)" date) |
17627
2492168c1d05
(timezone-parse-date): Match forms 1 and 2 first.
Richard M. Stallman <rms@gnu.org>
parents:
16942
diff
changeset
|
152 ;; 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
|
153 ;; 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
|
154 ;; 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
|
155 (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
|
156 ((string-match |
2492168c1d05
(timezone-parse-date): Match forms 1 and 2 first.
Richard M. Stallman <rms@gnu.org>
parents:
16942
diff
changeset
|
157 "\\([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
|
158 ;; 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
|
159 (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
|
160 ((string-match |
9988
23ad7670da34
(timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents:
9770
diff
changeset
|
161 "\\([^ \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
|
162 ;; 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
|
163 (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
|
164 ((string-match |
23ad7670da34
(timezone-parse-date): Handle two new formats (6 and 7).
Richard M. Stallman <rms@gnu.org>
parents:
9770
diff
changeset
|
165 "\\([^ \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
|
166 ;; 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
|
167 (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
|
168 ((string-match |
2908 | 169 "\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\([0-9]+\\)" date) |
170 ;; Styles: (3) without timezone | |
171 (setq year 4 month 1 day 2 time 3 zone nil)) | |
172 ((string-match | |
173 "\\([^ \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
|
174 ;; Styles: (3) with timezone |
2908 | 175 (setq year 5 month 1 day 2 time 3 zone 4)) |
176 ((string-match | |
177 "\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+\\)[ \t]*\\([-+a-zA-Z0-9]+\\)" date) | |
178 ;; Styles: (4) with timezone | |
179 (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
|
180 ((string-match |
24697
4708ef6e279e
(timezone-parse-date): Recognize new format used in internet cookies.
Karl Heuer <kwzh@gnu.org>
parents:
24570
diff
changeset
|
181 "\\([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
|
182 ;; Styles: (5) with timezone. |
4708ef6e279e
(timezone-parse-date): Recognize new format used in internet cookies.
Karl Heuer <kwzh@gnu.org>
parents:
24570
diff
changeset
|
183 (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
|
184 ((string-match |
24570
d8a0152b923f
(timezone-parse-date): Corrected regexp for
Richard M. Stallman <rms@gnu.org>
parents:
24305
diff
changeset
|
185 "\\([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
|
186 ;; Styles: (5) without timezone. |
4324c797a9e3
(timezone-parse-date): Handle new style 22-AUG-1993.
Richard M. Stallman <rms@gnu.org>
parents:
4510
diff
changeset
|
187 (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
|
188 ((string-match |
32290
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
189 "\\([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
|
190 ;; 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
|
191 (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
|
192 ((string-match |
53047
9f2b82f3752a
(timezone-parse-date): Fix style 8 to accept ISO
Alex Schroeder <alex@gnu.org>
parents:
52401
diff
changeset
|
193 "\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)[T \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
|
194 ;; 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
|
195 (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
|
196 ((string-match |
53047
9f2b82f3752a
(timezone-parse-date): Fix style 8 to accept ISO
Alex Schroeder <alex@gnu.org>
parents:
52401
diff
changeset
|
197 "\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)[T \t]+\\([0-9]+:[0-9]+:[0-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
|
198 ;; 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
|
199 (setq year 1 month 2 day 3 time 4 zone nil)) |
2908 | 200 ) |
25383 | 201 (when year |
202 (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
|
203 ;; 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
|
204 ;; 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
|
205 ;; be relative to 1900. |
25383 | 206 (if (< (length year) 4) |
62402
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
53047
diff
changeset
|
207 (let ((y (string-to-number 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
|
208 (if (< y 69) |
25383 | 209 (setq y (+ y 100))) |
210 (setq year (int-to-string (+ 1900 y))))) | |
211 (setq month | |
212 (if (= (aref date (+ (match-beginning month) 2)) ?-) | |
213 ;; Handle numeric months, spanning exactly two digits. | |
214 (substring date | |
215 (match-beginning month) | |
216 (+ (match-beginning month) 2)) | |
217 (let* ((string (substring date | |
218 (match-beginning month) | |
219 (+ (match-beginning month) 3))) | |
220 (monthnum | |
221 (cdr (assoc (upcase string) timezone-months-assoc)))) | |
222 (if monthnum | |
223 (int-to-string monthnum))))) | |
224 (setq day (match-string day date)) | |
225 (setq time (match-string time date))) | |
226 (if zone (setq zone (match-string zone date))) | |
2908 | 227 ;; Return a vector. |
16942
eca5dfcd481d
(timezone-parse-date): Treat unknown month name
Richard M. Stallman <rms@gnu.org>
parents:
16900
diff
changeset
|
228 (if (and year month) |
2908 | 229 (vector year month day time zone) |
25383 | 230 (vector "0" "0" "0" "0" nil)))) |
2908 | 231 |
232 (defun timezone-parse-time (time) | |
233 "Parse TIME (HH:MM:SS) and return a vector [hour minute second]. | |
234 Recognize HH:MM:SS, HH:MM, HHMMSS, HHMM." | |
235 (let ((time (or time "")) | |
25383 | 236 hour minute second) |
2908 | 237 (cond ((string-match "\\`\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)\\'" time) |
238 ;; HH:MM:SS | |
239 (setq hour 1 minute 2 second 3)) | |
240 ((string-match "\\`\\([0-9]+\\):\\([0-9]+\\)\\'" time) | |
241 ;; HH:MM | |
242 (setq hour 1 minute 2 second nil)) | |
243 ((string-match "\\`\\([0-9][0-9]\\)\\([0-9][0-9]\\)\\([0-9][0-9]\\)\\'" time) | |
244 ;; HHMMSS | |
245 (setq hour 1 minute 2 second 3)) | |
246 ((string-match "\\`\\([0-9][0-9]\\)\\([0-9][0-9]\\)\\'" time) | |
247 ;; HHMM | |
248 (setq hour 1 minute 2 second nil)) | |
249 ) | |
250 ;; Return [hour minute second] | |
251 (vector | |
25383 | 252 (if hour (match-string hour time) "0") |
253 (if minute (match-string minute time) "0") | |
254 (if second (match-string second time) "0")))) | |
2908 | 255 |
256 | |
257 ;; Miscellaneous | |
258 | |
259 (defun timezone-zone-to-minute (timezone) | |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
260 "Translate TIMEZONE to an integer minute offset from GMT. |
99298
225286546090
Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
94678
diff
changeset
|
261 TIMEZONE can be a cons cell containing the output of `current-time-zone', |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
262 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
|
263 (cond |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
264 ((consp timezone) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
265 (/ (car timezone) 60)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
266 (timezone |
2908 | 267 (progn |
268 (setq timezone | |
269 (or (cdr (assoc (upcase timezone) timezone-world-timezones)) | |
270 ;; +900 | |
271 timezone)) | |
272 (if (stringp timezone) | |
62402
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
53047
diff
changeset
|
273 (setq timezone (string-to-number timezone))) |
2908 | 274 ;; Taking account of minute in timezone. |
275 ;; HHMM -> MM | |
4510
10baf5e7550f
(timezone-fix-time, timezone-zone-to-minute): Simplify with `abs'
Paul Eggert <eggert@twinsun.com>
parents:
3505
diff
changeset
|
276 (let* ((abszone (abs timezone)) |
2908 | 277 (minutes (+ (* 60 (/ abszone 100)) (% abszone 100)))) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
278 (if (< timezone 0) (- minutes) minutes)))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
279 (t 0))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
280 |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
281 (defun timezone-time-from-absolute (date seconds) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
282 "Compute the UTC time equivalent to DATE at time SECONDS after midnight. |
99298
225286546090
Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
94678
diff
changeset
|
283 Return a list suitable as an argument to `current-time-zone', |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
284 or nil if the date cannot be thus represented. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
285 DATE is the number of days elapsed since the (imaginary) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
286 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
|
287 (let* ((current-time-origin 719163) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
288 ;; (timezone-absolute-from-gregorian 1 1 1970) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
289 (days (- date current-time-origin)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
290 (seconds-per-day (float 86400)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
291 (seconds (+ seconds (* days seconds-per-day))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
292 (current-time-arithmetic-base (float 65536)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
293 (hi (floor (/ seconds current-time-arithmetic-base))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
294 (hibase (* hi current-time-arithmetic-base)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
295 (lo (floor (- seconds hibase)))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
296 (and (< (abs (- seconds (+ hibase lo))) 2) ;; Check for integer overflow. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
297 (cons hi lo)))) |
2908 | 298 |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
299 (defun timezone-time-zone-from-absolute (date seconds) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
300 "Compute the local time zone for DATE at time SECONDS after midnight. |
99298
225286546090
Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
94678
diff
changeset
|
301 Return a list in the same format as `current-time-zone's result, |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
302 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
|
303 DATE is the number of days elapsed since the (imaginary) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
304 Gregorian date Sunday, December 31, 1 BC." |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
305 (and (fboundp 'current-time-zone) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
306 (let ((utc-time (timezone-time-from-absolute date seconds))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
307 (and utc-time |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
308 (let ((zone (current-time-zone utc-time))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
309 (and (car zone) zone)))))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
310 |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
311 (defun timezone-fix-time (date local timezone) |
3505 | 312 "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
|
313 If LOCAL is nil, it is assumed to be GMT. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
314 If TIMEZONE is nil, use the local time zone." |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
315 (let* ((date (timezone-parse-date date)) |
62402
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
53047
diff
changeset
|
316 (year (string-to-number (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
|
317 (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
|
318 (+ year 2000)) |
d4119f1137f9
(timezone-fix-time): For year values < 50, add 2000.
Richard M. Stallman <rms@gnu.org>
parents:
9988
diff
changeset
|
319 ((< year 100) |
d4119f1137f9
(timezone-fix-time): For year values < 50, add 2000.
Richard M. Stallman <rms@gnu.org>
parents:
9988
diff
changeset
|
320 (+ 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
|
321 ((< 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
|
322 (+ year 1900)) |
10255
d4119f1137f9
(timezone-fix-time): For year values < 50, add 2000.
Richard M. Stallman <rms@gnu.org>
parents:
9988
diff
changeset
|
323 (t year))) |
62402
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
53047
diff
changeset
|
324 (month (string-to-number (aref date 1))) |
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
53047
diff
changeset
|
325 (day (string-to-number (aref date 2))) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
326 (time (timezone-parse-time (aref date 3))) |
62402
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
53047
diff
changeset
|
327 (hour (string-to-number (aref time 0))) |
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
53047
diff
changeset
|
328 (minute (string-to-number (aref time 1))) |
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
53047
diff
changeset
|
329 (second (string-to-number (aref time 2))) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
330 (local (or (aref date 4) local)) ;Use original if defined |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
331 (timezone |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
332 (or timezone |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
333 (timezone-time-zone-from-absolute |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
334 (timezone-absolute-from-gregorian month day year) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
335 (+ second (* 60 (+ minute (* 60 hour))))))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
336 (diff (- (timezone-zone-to-minute timezone) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
337 (timezone-zone-to-minute local))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
338 (minute (+ minute diff)) |
4510
10baf5e7550f
(timezone-fix-time, timezone-zone-to-minute): Simplify with `abs'
Paul Eggert <eggert@twinsun.com>
parents:
3505
diff
changeset
|
339 (hour-fix (floor minute 60))) |
2908 | 340 (setq hour (+ hour hour-fix)) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
341 (setq minute (- minute (* 60 hour-fix))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
342 ;; HOUR may be larger than 24 or smaller than 0. |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
343 (cond ((<= 24 hour) ;24 -> 00 |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
344 (setq hour (- hour 24)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
345 (setq day (1+ day)) |
32290
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
346 (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
|
347 (setq month (1+ month)) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
348 (setq day 1) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
349 (when (< 12 month) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
350 (setq month 1) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
351 (setq year (1+ year))))) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
352 ((> 0 hour) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
353 (setq hour (+ hour 24)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
354 (setq day (1- day)) |
32290
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
355 (when (> 1 day) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
356 (setq month (1- month)) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
357 (when (> 1 month) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
358 (setq month 12) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
359 (setq year (1- year))) |
0d473fed67ba
(timezone-parse-date): Doc fix. Fix regexps for (5)
Dave Love <fx@gnu.org>
parents:
27493
diff
changeset
|
360 (setq day (timezone-last-day-of-month month year))))) |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
361 (vector year month day hour minute second timezone))) |
2908 | 362 |
363 ;; Partly copied from Calendar program by Edward M. Reingold. | |
364 ;; Thanks a lot. | |
365 | |
366 (defun timezone-last-day-of-month (month year) | |
367 "The last day in MONTH during YEAR." | |
368 (if (and (= month 2) (timezone-leap-year-p year)) | |
369 29 | |
370 (aref [31 28 31 30 31 30 31 31 30 31 30 31] (1- month)))) | |
371 | |
372 (defun timezone-leap-year-p (year) | |
99298
225286546090
Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
94678
diff
changeset
|
373 "Return t if YEAR is a Gregorian leap year." |
2908 | 374 (or (and (zerop (% year 4)) |
375 (not (zerop (% year 100)))) | |
376 (zerop (% year 400)))) | |
2910
74b7994f2d20
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2908
diff
changeset
|
377 |
3494
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
378 (defun timezone-day-number (month day year) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
379 "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
|
380 (let ((day-of-year (+ day (* 31 (1- month))))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
381 (if (> month 2) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
382 (progn |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
383 (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
|
384 (if (timezone-leap-year-p year) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
385 (setq day-of-year (1+ day-of-year))))) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
386 day-of-year)) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
387 |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
388 (defun timezone-absolute-from-gregorian (month day year) |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
389 "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
|
390 The Gregorian date Sunday, December 31, 1 BC is imaginary." |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
391 (+ (timezone-day-number month day year);; Days this year |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
392 (* 365 (1- year));; + Days in prior years |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
393 (/ (1- year) 4);; + Julian leap years |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
394 (- (/ (1- year) 100));; - century years |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
395 (/ (1- year) 400)));; + Gregorian leap years |
ddc7da3f66d1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2910
diff
changeset
|
396 |
25383 | 397 (provide 'timezone) |
398 | |
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
79721
diff
changeset
|
399 ;; arch-tag: e23d5bc6-f32d-48ba-8996-323e9d654b3f |
2910
74b7994f2d20
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
2908
diff
changeset
|
400 ;;; timezone.el ends here |