]> code.delx.au - gnu-emacs/blobdiff - lisp/timezone.el
(find-file-noselect): If after-find-file switches buffers,
[gnu-emacs] / lisp / timezone.el
index c5c68264987005fe8132de362faea67c99260e33..8a847a9d97a7f5134988d5f3071ad4102c0d23a3 100644 (file)
@@ -1,9 +1,10 @@
-;;; Timezone package for GNU Emacs
+;;; timezone.el --- time zone package for GNU Emacs
 
 ;; Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
 
-;;; Author: Masanobu Umeda
-;;; Maintainer: umerin@mse.kyutech.ac.jp
+;; Author: Masanobu Umeda
+;; Maintainer: umerin@mse.kyutech.ac.jp
+;; Keywords: news
 
 ;; This file is part of GNU Emacs.
 
@@ -18,8 +19,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Code:
 
@@ -36,6 +38,7 @@
     ("EDT" .  -400)
     ("AST" .  -400)                    ;by <clamen@CS.CMU.EDU>
     ("NST" .  -330)                    ;by <clamen@CS.CMU.EDU>
+    ("UT"  .  +000)
     ("GMT" .  +000)
     ("BST" .  +100)
     ("MET" .  +100)
@@ -125,7 +128,15 @@ Understands the following styles:
  (2) Fri, 17 Mar 89 4:01[:33] [GMT]
  (3) Mon Jan 16 16:12[:37] [GMT] 1989
  (4) 6 May 1992 1641-JST (Wednesday)
- (5) 22-AUG-1993 10:59:12.82"
+ (5) 22-AUG-1993 10:59:12.82
+ (6) Thu, 11 Apr 16:17:12 91 [MET]
+ (7) Mon, 6  Jul 16:47:20 T 1992 [MET]"
+  ;; Get rid of any text properties.
+  (and (stringp date)
+       (or (text-properties-at 0 date)
+          (next-property-change 0 date))
+       (setq date (copy-sequence date))
+       (set-text-properties 0 (length date) nil date))
   (let ((date (or date ""))
        (year nil)
        (month nil)
@@ -133,6 +144,14 @@ Understands the following styles:
        (time nil)
        (zone nil))                     ;This may be nil.
     (cond ((string-match
+           "\\([^ \t,]+\\),[ \t]+\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\(T[ \t]+\\|\\)\\([0-9]+\\)[ \t]*\\'" date)
+          ;; Styles: (6) and (7) without timezone
+          (setq year 6 month 3 day 2 time 4 zone nil))
+         ((string-match
+           "\\([^ \t,]+\\),[ \t]+\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]+\\(T[ \t]+\\|\\)\\([0-9]+\\)[ \t]*\\([-+a-zA-Z0-9]+\\)" date)
+          ;; Styles: (6) and (7) with timezone and buggy timezone
+          (setq year 6 month 3 day 2 time 4 zone 7))
+         ((string-match
            "\\([0-9]+\\)[ \t]+\\([^ \t,]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9:]+\\)[ \t]*\\'" date)
           ;; Styles: (1) and (2) without timezone
           (setq year 3 month 2 day 1 time 4 zone nil))
@@ -164,17 +183,13 @@ Understands the following styles:
          ;; It is now Dec 1992.  8 years before the end of the World.
          (if (< (length year) 4)
              (setq year (concat "19" (substring year -2 nil))))
-         (setq month
-               (int-to-string
-                (cdr
-                 (assoc
-                  (upcase
-                   ;; Don't use `match-end' in order to take 3
-                   ;; letters from the beginning.
-                   (substring date
-                              (match-beginning month)
-                              (+ (match-beginning month) 3)))
-                  timezone-months-assoc))))
+         (let ((string (substring date
+                                  (match-beginning month)
+                                  (+ (match-beginning month) 3))))
+           (setq month
+                 (int-to-string
+                  (cdr (assoc (upcase string) timezone-months-assoc)))))
+
          (setq day
                (substring date (match-beginning day) (match-end day)))
          (setq time
@@ -279,7 +294,11 @@ If LOCAL is nil, it is assumed to be GMT.
 If TIMEZONE is nil, use the local time zone."
   (let* ((date   (timezone-parse-date date))
         (year   (string-to-int (aref date 0)))
-        (year   (if (< year 100) (+ year 1900) year))
+        (year   (cond ((< year 50)
+                       (+ year 2000))
+                      ((< year 100)
+                       (+ year 1900))
+                      (t year)))
         (month  (string-to-int (aref date 1)))
         (day    (string-to-int (aref date 2)))
         (time   (timezone-parse-time (aref date 3)))