On 2023/5/11 23:06, Ivan Krylov wrote:> ? Thu, 11 May 2023 22:15:49 +0800 > Jinsong Zhao <jszhao at yeah.net> ?????: > >> > (d <- strptime("1970-01-01 12:00:00 UTC", "%Y-%m-%d %H:%M:%OS", tz >> > = "")) >> [1] "1970-01-01 12:00:00 CST" >> > is.na(d) >> [1] TRUE > > Glad to see you're making progress! (Sometimes, is.na(strptime(...)) => TRUE is what progress looks like.) > > is.na.POSIXlt works by converting the "unpacked" date+time into POSIXct > (seconds since 1970-01-01 00:00 UTC) and then checking whether it's NA. > Evidently, as.POSIXct(d) returns NA. (Right?) > > What does unclass(d) look like on FreeBSD? Does it contain any NAs > itself, or do they originate somewhere in as.POSIXct(d)?I just forgot to answer your question. unclass(d) has $gmtoff with value of NA. However, in R 4.3.0 on Windows this slot also has the value of NA. as.POSIXct(d) on FreeBSD gives NA.> > My current hypothesis is that FreeBSD mktime() doesn't like something > about the timezone, but I may be wrong. Is is.na(strptime( > "1970-01-03 12:00:00 UTC", "%Y-%m-%d %H:%M:%OS", tz = '')) also TRUE? >
Hi! I ran the code (d <- strptime("1970-01-01 12:00:00 UTC", "%Y-%m-%d %H:%M:%OS", tz = "")) is.na(d) dput(unclass(d)) as.POSIXct(d) (d <- is.na(strptime("1970-01-03 12:00:00 UTC", "%Y-%m-%d %H:%M:%OS", tz = ''))) is.na(d) dput(unclass(d)) as.POSIXct(d) on ?R 4.2.3-1 on Linux 6.2.11-arch1-1? and ?R 4.1.0 on FreeBSD 13.0-RELEASE #0 releng/13.0-n244733-ea31abc261f,? yielding the same result: [1] "1970-01-01 12:00:00 CET" [1] FALSE list(sec = 0, min = 0L, hour = 12L, mday = 1L, mon = 0L, year = 70L, wday = 4L, yday = 0L, isdst = 0L, zone = "CET", gmtoff = NA_integer_) [1] "1970-01-01 12:00:00 CET" [1] FALSE [1] FALSE FALSE Error in as.POSIXct.default(d) : do not know how to convert 'd' to class ?POSIXct? Calls: as.POSIXct -> as.POSIXct.default Execution halted Best, Rasmus