From: Eric Abrahamsen <eric@ericabrahamsen.net>
To: help-gnu-emacs@gnu.org
Subject: Re: Question about parse-time-string and date-to-time
Date: Wed, 29 Mar 2017 16:12:04 -0700 [thread overview]
Message-ID: <87bmsj8ypn.fsf@ericabrahamsen.net> (raw)
In-Reply-To: CAOj2CQQGwMno0ChwAUfyBUmFm17UpD3a70bN65_GWcN_Q-GAkg@mail.gmail.com
John Mastro <john.b.mastro@gmail.com> writes:
> Eric Abrahamsen <eric@ericabrahamsen.net> wrote:
>> A conundrum:
>>
>> parse-time-string accepts a string representing a date, and parses it
>> into a list of time elements, with nil for the unknowns.
>>
>> date-to-time calls parse-time-string and passes the result straight to
>> encode-time, to produce a time value.
>>
>> encode-time accepts series of time elements, and raises an error if any
>> of them are nil.
>>
>> I might be missing something, but I don't see how date-to-time could
>> ever work. Wouldn't it always have to replace the nils with zeros before
>> passing the result to encode time?
>
> It looks like, if the first call to `encode-time' signals an error, it
> re-tries using the result of calling `timezone-make-date-arpa-standard'
> on the original DATE argument:
>
> (defun date-to-time (date)
> (condition-case err
> (apply 'encode-time (parse-time-string date))
> (error
> ;; ...
> (apply 'encode-time
> (parse-time-string
> (timezone-make-date-arpa-standard date)))
> ;; ...
> )))
>
> I was not familiar with `timezone-make-date-arpa-standard', and am not
> familiar with "arpanet standard date" as a concept. It seems to
> guarantee that some valid date string will be returned, but not
> necessarily the one I would have guessed when time information is
> missing:
>
> (timezone-make-date-arpa-standard "2017-03-29 3:05:00")
> ;=> "28 Mar 2017 20:05:00 -0700"
> (timezone-make-date-arpa-standard "2017-03-29")
> ;=> "31 Dec 1999 16:00:00 -0800"
> (timezone-make-date-arpa-standard "3/29/2016")
> ;=> "31 Dec 1999 16:00:00 -0800"
>
> And sure enough:
>
> (equal (date-to-time "2017-03-29")
> (date-to-time "31 Dec 1999 16:00:00 -0800"))
> ;=> t
>
> So it seems like it returns an arbitrary date if time elements are
> missing?
That's what I've found. If parse-time-string returns any nil values,
then you get 31 Dec, 1999. I'd rather get an error!
prev parent reply other threads:[~2017-03-29 23:12 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-29 21:01 Question about parse-time-string and date-to-time Eric Abrahamsen
2017-03-29 21:18 ` Eric Abrahamsen
2017-03-29 22:14 ` John Mastro
2017-03-29 23:12 ` Eric Abrahamsen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87bmsj8ypn.fsf@ericabrahamsen.net \
--to=eric@ericabrahamsen.net \
--cc=help-gnu-emacs@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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 read-only IMAP folder(s) and NNTP newsgroup(s).