From ruipbarradas at sapo.pt  Tue Jul 10 23:59:11 2012
From: ruipbarradas at sapo.pt (Rui Barradas)
Date: Tue, 10 Jul 2012 22:59:11 +0100
Subject: [Rd] Negative years with strptime?
In-Reply-To: <CAFOpNVELg1wRzcR3SSmeGZ6+W5pCmJiRGWqQ2_ZGMJd0RRy+Ug@mail.gmail.com>
References: <CAFOpNVELg1wRzcR3SSmeGZ6+W5pCmJiRGWqQ2_ZGMJd0RRy+Ug@mail.gmail.com>
Message-ID: <4FFCA5AF.7050406@sapo.pt>

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
>



[Rd] Negative years with strptime?
Rui Barradas