Re: [Rd] Negative years with strptime?

From: Jeffrey Ryan <jeffrey.ryan_at_lemnica.com>
Date: Tue, 10 Jul 2012 17:53:25 -0500

?as.Date

Why would pre 0000 years be handled correctly? The help file explicitly states that they likely will not.

Note:

     The default formats follow the rules of the ISO 8601 international
     standard which expresses a day as ‘"2001-02-03"’.

     If the date string does not specify the date completely, the
     returned answer may be system-specific.  The most common behaviour
     is to assume that a missing year, month or day is the current one.
     If it specifies a date incorrectly, reliable implementations will
     give an error and the date is reported as ‘NA’.  Unfortunately
     some common implementations (such as ‘glibc’) are unreliable and
     guess at the intended meaning.

     Years before 1CE (aka 1AD) will probably not be handled correctly.



On Tue, Jul 10, 2012 at 4:59 PM, Rui Barradas <ruipbarradas_at_sapo.pt> wrote:
> Hello,
>
> Is there a bug with negative dates? Just see:
>
> seq(as.Date("0000-01-01"), length = 22, by = "-1 year")
> [1] "0000-01-01" "000/-01-01" "000.-01-01" "000--01-01" "000,-01-01"
> [6] "000+-01-01" "000*-01-01" "000)-01-01" "000(-01-01" "000'-01-01"
> [11] "00/0-01-01" "00//-01-01" "00/.-01-01" "00/--01-01" "00/,-01-01"
> [16] "00/+-01-01" "00/*-01-01" "00/)-01-01" "00/(-01-01" "00/'-01-01"
> [21] "00.0-01-01" "00./-01-01"
>
> See the year number: "after" the zero, i.e., downward from zero, the printed
> character is '/' which happens to be the ascii character before '0', and
> before it's '.', etc. This sequence gives the nine ascii characters before
> zero as last digit of the year, then the 10th is '0' as (now) expected, then
> goes to the second digit, etc.
>
> It seems to stop at the first 9, or else we would have some sort of real
> problem.
>
> Anyway, this doesn't look right.
>
> Rui Barradas
> Em 10-07-2012 22:17, Winston Chang escreveu:
>
>> Is there a way to make as.Date() and strptime() process strings with
>> negative years? It appears that Date objects can contain negative years
>> and
>> you can convert them to strings, but you can't convert them back to Date
>> objects.
>>
>>
>> x <- as.Date(c("0001-01-24", "0500-01-24"))
>> as.character(x)
>> # "0001-01-24" "0500-02-02"
>> as.Date(as.character(x))
>> # "0001-01-24" "0500-01-24"
>>
>> # Minus 391 days gives negative year
>> as.character(x - 391)
>> # "-001-12-30" "0498-12-29"
>>
>> # Can't convert this string back to Date
>> as.Date(as.character(x - 391))
>> # Error during wrapup: character string is not in a standard unambiguous
>> format
>>
>>
>> # as.Date.character uses strptime, so we can try using strptime directly
>> strptime(as.character(x), "%Y-%m-%d")
>> # "0001-01-24" "0500-01-24"
>>
>> strptime(as.character(x - 391), "%Y-%m-%d")
>> # NA "0498-12-29"
>>
>>
>> Thanks,
>> -Winston
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-devel_at_r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
> ______________________________________________
> R-devel_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Jeffrey Ryan
jeffrey.ryan_at_lemnica.com

www.lemnica.com
www.esotericR.com

______________________________________________
R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Tue 10 Jul 2012 - 23:08:14 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 11 Jul 2012 - 04:30:31 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive