>>>>> Martin Maechler >>>>> on Fri, 23 Sep 2022 11:04:12 +0200 writes:
>>>>> Kurt Hornik >>>>> on Fri, 23 Sep 2022 09:57:49 +0200 writes: >>>>> Martin Maechler writes: > > Currently in R-devel, > > R> as.POSIXlt.Date > > function (x, ...) > > { > > if (any((y <- unclass(x)) > .Machine$integer.max, na.rm = TRUE)) > > as.POSIXlt(.POSIXct(y * 86400), tz = "UTC") > > else .Internal(Date2POSIXlt(x)) > > } > > R> as.POSIXct.Date > > function (x, ...) > > .POSIXct(unclass(x) * 86400) > > > Adding tz to the latter is easy, and the former could do the if() part > > also with a given tz without needing to change the .Internal? > > Genau! Even more elegantly than I first thought when I wrote > "post-processing": > > The following even adds internal consistency inside as.POSIXlt.Date() : > > as.POSIXlt.Date <- function(x, tz = "UTC", ...) { > as.POSIXlt(if(any((y <- unclass(x)) > .Machine$integer.max, na.rm = TRUE)) > .POSIXct(y * 86400) > else > .Internal(Date2POSIXlt(x)) > , tz = tz) > } > > because now, tz is even *formally* treated the same in both > cases (whereas previously it only appeared visually in one case). > > So probably, another reason to go there. > Note that I also think we'd keep the tz = "UTZ" > default argument, even when the > other as.POSIX[cl]t() methods have 'tz = ""' Hmm, good plan, but not working for the (more important) second branch: as.POSIXlt(<POSIXlt>, tz = "..") immediately returns the first argument without ever looking if there are further arguments, in this case 'tz'.. --> we would also have to slightly change as.POSIXlt.default(x) such that it obeyed a 'tz = ".."' in the case of x being "POSIXlt". Almost surely this will break some code which had relied on the current -- a bit surpristing to me -- behavior. Well,... I think we *should* want the above {setting a "tz"} for POSIXlt to work. Martin ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel