From donaldcallen at gmail.com  Mon Feb  4 14:55:12 2008
From: donaldcallen at gmail.com (donaldcallen at gmail.com)
Date: Mon,  4 Feb 2008 14:55:12 +0100 (CET)
Subject: [Rd] strftime fails on POSIXct objects (PR#10695)
Message-ID: <20080204135512.48ED7283416A@mail.pubhealth.ku.dk>

R 2.6.1 on a Thinkpad T60 running up-to-date Gentoo:

Despite the documentation, which says:

     'strftime' is an alias for 'format.POSIXlt', and 'format.POSIXct'
     first converts to class '"POSIXlt"' by calling 'as.POSIXlt'.  Note
     that only that conversion depends on the time zone.

strftime fails on POSIXct objects:

> foo <- as.POSIXct(strptime(x='2007-09-22', format='%Y-%m-%d'))
> strftime(x=foo, format='%Y-%m-%d')
Error in strftime(x = foo, format = "%Y-%m-%d") : wrong class

It's pretty clear why, given the first two lines of the function:
> strftime
function (x, format = "", usetz = FALSE, ...)
{
    if (!inherits(x, "POSIXlt"))
        stop("wrong class")
    if (format == "") {
        times <- unlist(unclass(x)[1:3])
        secs <- x$sec
        secs <- secs[!is.na(secs)]
        np <- getOption("digits.secs")
        if (is.null(np))
            np <- 0
        else np <- min(6, np)
        if (np >= 1) {
            for (i in (1:np) - 1) if (all(abs(secs - round(secs,
                i)) < 1e-06)) {
                np <- i
                break
            }
        }
        format <- if (all(times[!is.na(times)] == 0))
            "%Y-%m-%d"
        else if (np == 0)
            "%Y-%m-%d %H:%M:%S"
        else paste("%Y-%m-%d %H:%M:%OS", np, sep = "")
    }
    .Internal(format.POSIXlt(x, format, usetz))
}
<environment: namespace:base>
>

/Don Allen



[Rd] strftime fails on POSIXct objects (PR#10695)
donaldcallen at gmail.com