[Rd] Negative years with strptime?
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
Re: [Rd] Negative years with strptime?
Hello, Is there a bug with negative dates? Just see: seq(as.Date(-01-01), length = 22, by = -1 year) [1] -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 __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] Negative years with strptime?
?as.Date Why would pre 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 ruipbarra...@sapo.pt wrote: Hello, Is there a bug with negative dates? Just see: seq(as.Date(-01-01), length = 22, by = -1 year) [1] -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 __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel -- Jeffrey Ryan jeffrey.r...@lemnica.com www.lemnica.com www.esotericR.com __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] Negative years with strptime?
It looks different on my system (Mac, R 2.15.1) seq(as.Date(-01-01), length = 22, by = -1 year) [1] -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(-01-01), length = 22, by = -1 year) [1] -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-develhttps://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
Re: [Rd] Negative years with strptime?
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(-01-01), length = 22, by = -1 year) [1] -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 mailto:ruipbarra...@sapo.pt wrote: Hello, Is there a bug with negative dates? Just see: seq(as.Date(-01-01), length = 22, by = -1 year) [1] -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 mailto:R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/__listinfo/r-devel https://stat.ethz.ch/mailman/listinfo/r-devel __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel