[Rd] Negative years with strptime?

Rui Barradas ruipbarradas at sapo.pt
Wed Jul 11 06:23:44 CEST 2012


On my earlier post I forgot to mention the sessionInfo()

R version 2.15.0 (2012-03-30)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=Portuguese_Portugal.1252 
LC_CTYPE=Portuguese_Portugal.1252
[3] LC_MONETARY=Portuguese_Portugal.1252 LC_NUMERIC=C 

[5] LC_TIME=Portuguese_Portugal.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

Rui Barradas

Em 11-07-2012 02:05, Winston Chang escreveu:
> 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 <ruipbarradas at sapo.pt
> <mailto: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 <mailto:R-devel at r-project.org> mailing list
>         https://stat.ethz.ch/mailman/__listinfo/r-devel
>         <https://stat.ethz.ch/mailman/listinfo/r-devel>
>
>
>



More information about the R-devel mailing list