Gnus development mailing list
 help / color / mirror / Atom feed
* Time zone and 'lapsed under NT
@ 1999-07-09 15:23 Lars Magne Ingebrigtsen
  1999-07-09 16:31 ` Toby Speight
  0 siblings, 1 reply; 8+ messages in thread
From: Lars Magne Ingebrigtsen @ 1999-07-09 15:23 UTC (permalink / raw)


I've had reports the when doing X-Sent headers under NTEmacs and
XEmacs for NT, the time zone seems to be ignored.  Could someone
investigate what's going on here?

-- 
(domestic pets only, the antidote for overdose, milk.)
  larsi@gnus.org * Lars Magne Ingebrigtsen


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Time zone and 'lapsed under NT
  1999-07-09 15:23 Time zone and 'lapsed under NT Lars Magne Ingebrigtsen
@ 1999-07-09 16:31 ` Toby Speight
  1999-07-09 21:01   ` Lars Magne Ingebrigtsen
  0 siblings, 1 reply; 8+ messages in thread
From: Toby Speight @ 1999-07-09 16:31 UTC (permalink / raw)


Lars> Lars Magne Ingebrigtsen <URL:mailto:larsi@gnus.org>

0> In <URL:news:m34sjdsv8e.fsf@quimbies.gnus.org>, Lars wrote:

Lars> I've had reports the when doing X-Sent headers under NTEmacs and
Lars> XEmacs for NT, the time zone seems to be ignored.  Could someone
Lars> investigate what's going on here?

It seems to be ignoring the local time zone (it takes account of the
one on the message but assumes that the (current-time) is returning UT
rather than local time - or the other way around?

For me, (current-time-zone) returns '(3600 "GMT Daylight Time"); I
wonder if the zone name is causing confusion.  It's certainly a strange
identifier for BST!  The offset of 3600 is correct for me, though.

[Aside:

      (let ((tz (car (current-time-zone))))
        (format "Date: %s %s%04d" (current-time-string time)
                (if (> tz 0) "+" "-") (abs (/ tz 36))))

won't work very well for non-integral time zones - India will appear
as +0550 instead of +0530.]

The Emacs documentation doesn't describe (current-time) very well.  It
says, "the current time, as the number of seconds since 1970-01-01
00:00:00" - without specifying a time zone for that epoch...



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Time zone and 'lapsed under NT
  1999-07-09 16:31 ` Toby Speight
@ 1999-07-09 21:01   ` Lars Magne Ingebrigtsen
  1999-07-12 18:37     ` Toby Speight
  1999-07-12 18:44     ` Toby Speight
  0 siblings, 2 replies; 8+ messages in thread
From: Lars Magne Ingebrigtsen @ 1999-07-09 21:01 UTC (permalink / raw)


Toby Speight <Toby.Speight@streapadair.freeserve.co.uk> writes:

>       (let ((tz (car (current-time-zone))))
>         (format "Date: %s %s%04d" (current-time-string time)
>                 (if (> tz 0) "+" "-") (abs (/ tz 36))))
> 
> won't work very well for non-integral time zones - India will appear
> as +0550 instead of +0530.]

Yup.  Fix in Pterodactyl Gnus v0.95.

> The Emacs documentation doesn't describe (current-time) very well.  It
> says, "the current time, as the number of seconds since 1970-01-01
> 00:00:00" - without specifying a time zone for that epoch...

Hm.  Ooop -- the clock on this machine runs 12 minutes fast.  Er, uhm.

Anyway,

(current-time-string (current-time))
=> "Fri Jul  9 22:59:05 1999"

which is the local time, here, now.  (After fixing the clock.)

But what am I getting at?  Uhm -- perhaps the bug isn't in the
generating-the-Data-header part, but in the parsing part?

-- 
(domestic pets only, the antidote for overdose, milk.)
  larsi@gnus.org * Lars Magne Ingebrigtsen


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Time zone and 'lapsed under NT
  1999-07-09 21:01   ` Lars Magne Ingebrigtsen
@ 1999-07-12 18:37     ` Toby Speight
  1999-07-15 11:55       ` Toby Speight
  1999-08-27 17:55       ` Lars Magne Ingebrigtsen
  1999-07-12 18:44     ` Toby Speight
  1 sibling, 2 replies; 8+ messages in thread
From: Toby Speight @ 1999-07-12 18:37 UTC (permalink / raw)


Lars> Lars Magne Ingebrigtsen <URL:mailto:larsi@gnus.org>

0> Toby Speight <Toby.Speight@streapadair.freeserve.co.uk> writes:

>> The Emacs documentation doesn't describe (current-time) very well.  It
>> says, "the current time, as the number of seconds since 1970-01-01
>> 00:00:00" - without specifying a time zone for that epoch...


0> In <URL:news:m3vhbtfsh5.fsf@quimbies.gnus.org>, Lars wrote:

Lars> (current-time-string (current-time))
Lars> => "Fri Jul  9 22:59:05 1999"
Lars>
Lars> which is the local time, here, now.  (After fixing the clock.)

(current-time)
=> (14218 11870 732000)
(current-time-string '(14218 11870 732000))
=> "Mon Jul 12 19:05:18 1999"

That's local time for me, too (on NT).  What I'm not sure about is
whether the representation of (current-time) is the same on both
platforms; it's possible that it is seconds-after-local-epoch on one
platform and seconds-after-UT-epoch on the other.  If
(current-time-string) matches, you'd only see the difference if (a)
you transfer numeric times between the platforms or (b) you build a
numeric time from something other than (current-time).  We're doing
(b).  Just a theory.  Can you report what (current-time-string '(14218
11870 732000)) gives you?


Lars> But what am I getting at?  Uhm -- perhaps the bug isn't in the
Lars> generating-the-Data-header part, but in the parsing part?

I think perhaps it is:

(date-to-time "Thu, 01 Jan 1970 02:00:00 GMT")
=> (0 7200)
(date-to-time "Thu, 01 Jan 1970 02:00:00 EST")
=> (0 7200)

but:

(parse-time-string "Thu, 01 Jan 1970 02:00:00 GMT")
=> (0 0 2 1 1 1970 4 (0) 0)
(parse-time-string "Thu, 01 Jan 1970 02:00:00 EST")
=> (0 0 2 1 1 1970 4 (-18000) -18000)

So I suspect date-to-time, which is basically a wrapper around
encode-time.  encode-time is a built-in function, so if this is
broken, it's an NTEmacs bug.  BTW, I'm on GNU Emacs 20.3.1
(i386-*-nt4.0).  Checking:

(encode-time 0 0 2 1 1 1970 4 '(0) 0)
=> (0 7200)
(encode-time 0 0 2 1 1 1970 4 '(-18000) -18000)
=> (0 7200)

Looks like that's our bug.  A workaround ought to be possible, but
only by duplicating the broken functions.  I don't have the time to do
it.

P.S. Lars, could you report this to the Emacs bug team?  Ta.  I guess
you'd better include the associated documentation bug (what zone is
the epoch?), too.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Time zone and 'lapsed under NT
  1999-07-09 21:01   ` Lars Magne Ingebrigtsen
  1999-07-12 18:37     ` Toby Speight
@ 1999-07-12 18:44     ` Toby Speight
  1 sibling, 0 replies; 8+ messages in thread
From: Toby Speight @ 1999-07-12 18:44 UTC (permalink / raw)


Lars> Lars Magne Ingebrigtsen <URL:mailto:larsi@gnus.org>

0> Toby Speight <Toby.Speight@streapadair.freeserve.co.uk> writes:

>> The Emacs documentation doesn't describe (current-time) very well.  It
>> says, "the current time, as the number of seconds since 1970-01-01
>> 00:00:00" - without specifying a time zone for that epoch...


0> In <URL:news:m3vhbtfsh5.fsf@quimbies.gnus.org>, Lars wrote:

Lars> (current-time-string (current-time))
Lars> => "Fri Jul  9 22:59:05 1999"
Lars>
Lars> which is the local time, here, now.  (After fixing the clock.)

(current-time)
=> (14218 11870 732000)
(current-time-string '(14218 11870 732000))
=> "Mon Jul 12 19:05:18 1999"

That's local time for me, too (on NT).  What I'm not sure about is
whether the representation of (current-time) is the same on both
platforms; it's possible that it is seconds-after-local-epoch on one
platform and seconds-after-UT-epoch on the other.  If
(current-time-string) matches, you'd only see the difference if (a)
you transfer numeric times between the platforms or (b) you build a
numeric time from something other than (current-time).  We're doing
(b).  Just a theory.  Can you report what (current-time-string '(14218
11870 732000)) gives you?


Lars> But what am I getting at?  Uhm -- perhaps the bug isn't in the
Lars> generating-the-Data-header part, but in the parsing part?

I think perhaps it is:

(date-to-time "Thu, 01 Jan 1970 02:00:00 GMT")
=> (0 7200)
(date-to-time "Thu, 01 Jan 1970 02:00:00 EST")
=> (0 7200)

but:

(parse-time-string "Thu, 01 Jan 1970 02:00:00 GMT")
=> (0 0 2 1 1 1970 4 (0) 0)
(parse-time-string "Thu, 01 Jan 1970 02:00:00 EST")
=> (0 0 2 1 1 1970 4 (-18000) -18000)

So I suspect date-to-time, which is basically a wrapper around
encode-time.  encode-time is a built-in function, so if this is
broken, it's an NTEmacs bug.  BTW, I'm on GNU Emacs 20.3.1
(i386-*-nt4.0).  Checking:

(encode-time 0 0 2 1 1 1970 4 '(0) 0)
=> (0 7200)
(encode-time 0 0 2 1 1 1970 4 '(-18000) -18000)
=> (0 7200)

Looks like that's our bug.  A workaround ought to be possible, but
only by duplicating the broken functions.  I don't have the time to do
it.

P.S. Lars, could you report this to the Emacs bug team?  Ta.  I guess
you'd better include the associated documentation bug (what zone is
the epoch?), too.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Time zone and 'lapsed under NT
  1999-07-12 18:37     ` Toby Speight
@ 1999-07-15 11:55       ` Toby Speight
  1999-08-27 17:57         ` Lars Magne Ingebrigtsen
  1999-08-27 17:55       ` Lars Magne Ingebrigtsen
  1 sibling, 1 reply; 8+ messages in thread
From: Toby Speight @ 1999-07-15 11:55 UTC (permalink / raw)


Toby> Toby Speight
Toby> <URL:mailto:Toby.Speight@streapadair.freeserve.co.uk>

0> In <URL:news:uu2r9yasp.fsf@lanber.cam.citrix.com>, Toby wrote:

Toby> (encode-time 0 0 2 1 1 1970 4 '(0) 0)
Toby> => (0 7200)
Toby> (encode-time 0 0 2 1 1 1970 4 '(-18000) -18000)
Toby> => (0 7200)
Toby>
Toby> Looks like that's our bug.  A workaround ought to be possible,
Toby> ...

Here's a workaround: in time-date.el, replace date-to-time with


(defun date-to-time (date)
  "Convert DATE into time."
  (condition-case ()
      (let ((time (parse-time-string date)))
        (setq time (cons (- (car time)
                            (- (or (nth 8 time) 0)
                               (or (car (current-time-zone)) 0)))
                         (cdr time)))
        (setcdr (cdr (cdr (cdr (cdr (cdr time))))) nil)
        (apply 'encode-time time))
    (error (error "Invalid date: %s" date))))


This could do with some testing in other time zones and a regression
test on non-NT platforms, though.

And you need to change article-make-date-line not to use
parse-time-string directly:


     ((eq type 'ut)
      (concat "Date: "
              (current-time-string
               (let* ((e (parse-time-string date))
                     (tm (apply 'encode-time e))
                     (ms (car tm))
                     (ls (- (cadr tm) (car (current-time-zone)))))

becomes

     ((eq type 'ut)
      (concat "Date: "
              (current-time-string
               (let* ((ms (car time))
                      (ls (- (cadr time) (car (current-time-zone)))))



Alternatively, you could make parse-time-string do the stuff I put
into date-to-time.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Time zone and 'lapsed under NT
  1999-07-12 18:37     ` Toby Speight
  1999-07-15 11:55       ` Toby Speight
@ 1999-08-27 17:55       ` Lars Magne Ingebrigtsen
  1 sibling, 0 replies; 8+ messages in thread
From: Lars Magne Ingebrigtsen @ 1999-08-27 17:55 UTC (permalink / raw)


Toby Speight <Toby.Speight@streapadair.freeserve.co.uk> writes:

> (current-time)
> => (14218 11870 732000)
> (current-time-string '(14218 11870 732000))
> => "Mon Jul 12 19:05:18 1999"
> 
> That's local time for me, too (on NT).  What I'm not sure about is
> whether the representation of (current-time) is the same on both
> platforms; it's possible that it is seconds-after-local-epoch on one
> platform and seconds-after-UT-epoch on the other.  If
> (current-time-string) matches, you'd only see the difference if (a)
> you transfer numeric times between the platforms or (b) you build a
> numeric time from something other than (current-time).  We're doing
> (b).  Just a theory.  Can you report what (current-time-string '(14218
> 11870 732000)) gives you?

(current-time-string '(14218 11870 732000))
=> "Mon Jul 12 20:05:18 1999"

Ick.

> P.S. Lars, could you report this to the Emacs bug team?  Ta.  I guess
> you'd better include the associated documentation bug (what zone is
> the epoch?), too.

Uhm, ah...  I forget.

-- 
(domestic pets only, the antidote for overdose, milk.)
  larsi@gnus.org * Lars Magne Ingebrigtsen


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Time zone and 'lapsed under NT
  1999-07-15 11:55       ` Toby Speight
@ 1999-08-27 17:57         ` Lars Magne Ingebrigtsen
  0 siblings, 0 replies; 8+ messages in thread
From: Lars Magne Ingebrigtsen @ 1999-08-27 17:57 UTC (permalink / raw)


Toby Speight <Toby.Speight@streapadair.freeserve.co.uk> writes:

> Here's a workaround: in time-date.el, replace date-to-time with
> 
> (defun date-to-time (date)
>   "Convert DATE into time."
>   (condition-case ()
>       (let ((time (parse-time-string date)))
>         (setq time (cons (- (car time)
>                             (- (or (nth 8 time) 0)
>                                (or (car (current-time-zone)) 0)))
>                          (cdr time)))
>         (setcdr (cdr (cdr (cdr (cdr (cdr time))))) nil)
>         (apply 'encode-time time))
>     (error (error "Invalid date: %s" date))))
> 
> This could do with some testing in other time zones and a regression
> test on non-NT platforms, though.

I don't think this will work correctly on non-NT platforms...

-- 
(domestic pets only, the antidote for overdose, milk.)
  larsi@gnus.org * Lars Magne Ingebrigtsen


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~1999-08-27 17:57 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-07-09 15:23 Time zone and 'lapsed under NT Lars Magne Ingebrigtsen
1999-07-09 16:31 ` Toby Speight
1999-07-09 21:01   ` Lars Magne Ingebrigtsen
1999-07-12 18:37     ` Toby Speight
1999-07-15 11:55       ` Toby Speight
1999-08-27 17:57         ` Lars Magne Ingebrigtsen
1999-08-27 17:55       ` Lars Magne Ingebrigtsen
1999-07-12 18:44     ` Toby Speight

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).