Implement some rudimentary time-zone code so that we can produce
authorChris Hanson <org/chris-hanson/cph>
Sat, 22 Apr 1995 23:42:10 +0000 (23:42 +0000)
committerChris Hanson <org/chris-hanson/cph>
Sat, 22 Apr 1995 23:42:10 +0000 (23:42 +0000)
reasonably accurate time zones in RFC-822 dates.

v7/src/runtime/datime.scm
v7/src/runtime/os2prm.scm
v8/src/runtime/runtime.pkg

index d68c96c3a26eebb0893438f47ebff596b81ca99a..8860729c8ef51c8b02fef7442d63fffdbf8c75b1 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: datime.scm,v 14.8 1995/04/22 23:37:09 cph Exp $
+$Id: datime.scm,v 14.9 1995/04/22 23:42:10 cph Exp $
 
 Copyright (c) 1988-95 Massachusetts Institute of Technology
 
@@ -150,10 +150,11 @@ MIT in each case. |#
   (if (not (time-zone? tz))
       (error:wrong-type-argument tz "time zone" 'TIME-ZONE->STRING))
   (let ((minutes (round (* 60 (- tz)))))
-    (let ((qr (integer-divide (abs minutes) 60)))
+    (let ((qr (integer-divide (abs minutes) 60))
+         (d2 (lambda (n) (string-pad-left (number->string n) 2 #\0))))
       (string-append (if (< minutes 0) "-" "+")
-                    (string-pad-left (integer-divide-quotient qr) 2 #\0)
-                    (string-pad-left (integer-divide-remainder qr) 2 #\0)))))
+                    (d2 (integer-divide-quotient qr))
+                    (d2 (integer-divide-remainder qr))))))
 
 (define (decoded-time/daylight-savings-time? dt)
   ;; In current implementation, DAY-OF-WEEK field might be missing, so
index d3227964ec82a23446706a97d8b34b1046271960..b692417afb279467c7d36657310e14b589172579 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: os2prm.scm,v 1.12 1995/04/15 06:58:41 cph Exp $
+$Id: os2prm.scm,v 1.13 1995/04/22 23:38:03 cph Exp $
 
 Copyright (c) 1994-95 Massachusetts Institute of Technology
 
@@ -105,7 +105,6 @@ MIT in each case. |#
    modification-time))
 \f
 (define (file-time->string time)
-  ;; Except for the missing time zone, this is an RFC-822 date/time string.
   (let ((dt (decode-file-time time))
        (d2 (lambda (n) (string-pad-left (number->string n) 2 #\0))))
     (string-append (number->string (decoded-time/day dt))
@@ -118,7 +117,24 @@ MIT in each case. |#
                   ":"
                   (d2 (decoded-time/minute dt))
                   ":"
-                  (d2 (decoded-time/second dt)))))
+                  (d2 (decoded-time/second dt))
+                  " "
+                  (time-zone->string
+                   (let ((tz (local-time-zone)))
+                     (if (decoded-time/daylight-savings-time? dt)
+                         (- tz 1)
+                         tz))))))
+
+(define (local-time-zone)
+  (let ((tz (get-environment-variable "TZ")))
+    (or (and tz
+            (let ((l (string-length tz)))
+              (and (fix:> l 6)
+                   (let ((n (substring->number tz 3 (fix:- l 3))))
+                     (and (exact-integer? n)
+                          (<= -24 n 24)
+                          n)))))
+       5)))
 
 (define (decode-file-time time)
   (let* ((twosecs (remainder time 32))
index 568a3b353f9c80d3ee0f6613fcbfaac2bb029e3d..fda3995f5a37c959c7ea6d83874ed22809c043b0 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: runtime.pkg,v 14.252 1995/04/15 06:10:04 cph Exp $
+$Id: runtime.pkg,v 14.253 1995/04/22 23:37:23 cph Exp $
 
 Copyright (c) 1988-95 Massachusetts Institute of Technology
 
@@ -375,6 +375,7 @@ MIT in each case. |#
          decoded-time/date-string
          decoded-time/day
          decoded-time/day-of-week
+         decoded-time/daylight-savings-time?
          decoded-time/hour
          decoded-time/minute
          decoded-time/month
@@ -387,7 +388,9 @@ MIT in each case. |#
          make-decoded-time
          month/long-string
          month/max-days
-         month/short-string))
+         month/short-string
+         time-zone->string
+         time-zone?))
 
 (define-package (runtime debugger)
   (files "debug")