It looks different on my system (Mac, R 2.15.1) seq(as.Date("0000-01-01"), length = 22, by = "-1 year") [1] "0000-01-01" "-001-01-01" "-002-01-01" "-003-01-01" "-004-01-01" [6] "-005-01-01" "-006-01-01" "-007-01-01" "-008-01-01" "-009-01-01" [11] "-010-01-01" "-011-01-01" "-012-01-01" "-013-01-01" "-014-01-01" [16] "-015-01-01" "-016-01-01" "-017-01-01" "-018-01-01" "-019-01-01" [21] "-020-01-01" "-021-01-01"
So in addition to the issues with converting a negative-year string to a Date, it looks like converting a negative date to a string with as.character.Date() is probably also not consistent. It certainly would be useful to have a way of handling dates with negative years. -Winston On Tue, Jul 10, 2012 at 4:59 PM, Rui Barradas <ruipbarra...@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@r-project.org mailing list >> https://stat.ethz.ch/mailman/**listinfo/r-devel<https://stat.ethz.ch/mailman/listinfo/r-devel> >> >> > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel