format-time-string

TSUCHIYA Masatoshi tsuchiya @ pine.kuee.kyoto-u.ac.jp
2001年 10月 11日 (木) 17:25:35 JST


>> On Thu, 11 Oct 2001 16:50:16 +0900
>> 「山」== yamaoka @ jpl.org (Katsumi Yamaoka) said as follows:

山> それから、現在の poe.el にある関数定義では %z に対応していないよう
山> に見えます。

がーん。関数の doc string だけを見て使えるものだと思い込んでました。


土> または、format-time-string() の本体には触らずに、%z のみを自前で処
土> 理する advice を定義するという手も考えられます。

山> 勝手な感想を言わせていただければ、こっちの方が気が楽ですね。:-)

やっぱりそうですよね。


そういうわけで、現在の poe.el にある関数定義を %z に対応するように改良
すると同時に、

土>    (or (fboundp 'format-time-string)
山> この部分のために関数の置き換えが行なわれない問題があります。

この問題の対策として defadvice を併用する、という修正案を作ってみまし
た。どうでしょうか?

-------------- next part --------------
--- poe.el	2001/04/29 12:34:03	1.73
+++ poe.el	2001/10/11 08:14:32
@@ -1418,6 +1418,11 @@
 		 ((eq cur-char ?Z)
 		  (setq change-case (not change-case))
 		  (downcase (cadr (current-time-zone))))
+		 ((eq cur-char ?z)
+		  (let ((tz (car (current-time-zone))))
+		    (if (< tz 0)
+			(format "-%02d%02d" (/ (- tz) 3600) (/ (% (- tz) 3600) 60))
+		      (format "+%02d%02d" (/ tz 3600) (/ (% tz 3600) 60)))))
 		 (t
 		  (concat
 		   "%"
@@ -1458,6 +1463,24 @@
   ;; for `load-history'.
   (setq current-load-list (cons 'format-time-string current-load-list))
   (put 'format-time-string 'defun-maybe t))))
+
+;; format-time-string() of Mule2.3/XEmacs21.4 doesn't support `%z'.
+(unless (string-match "\\`[\\-\\+][0-9]+\\'"
+		      (format-time-string "%z" (current-time)))
+  (defadvice format-time-string
+    (before support-timezone-in-numeric-form activate compile)
+    "Advice to support the construct `%z'."
+    (if (let ((case-fold-search nil))
+	  (string-match "\\(\\(\\`\\|[^%]\\)\\(%%\\)*\\)%z" (ad-get-arg 0)))
+	(ad-set-arg
+	 0
+	 (concat
+	  (substring (ad-get-arg 0) 0 (match-end 1))
+	  (let ((tz (car (current-time-zone))))
+	    (if (< tz 0)
+		(format "-%02d%02d" (/ (- tz) 3600) (/ (% (- tz) 3600) 60))
+	      (format "+%02d%02d" (/ tz 3600) (/ (% tz 3600) 60))))
+	  (substring (ad-get-arg 0) (match-end 0)))))))
 
 ;; Emacs 20.1/XEmacs 20.3(?) and later: (split-string STRING &optional PATTERN)
 ;; Here is a XEmacs version.
-------------- next part --------------

山> ;; 揚げ足取りみたいになってしまってごめんなさい。

いえいえ、早くに問題点が発覚して良かったと思います。

;; それから、ML 宛のつもりで余分なメールを送ってしまい、失礼しました。

-- 
土屋 雅稔  ( TSUCHIYA Masatoshi )


More information about the APEL-ja mailing list