【发布时间】:2018-04-03 16:15:34
【问题描述】:
我阅读了lubridate 包中day 函数的描述,并试图了解它是如何工作的。这是我的例子:
library(lubridate)
test_date <- as.POSIXct('2017-02-28')
day(test_date) <-1
现在test_date 包含“2017-01-31 18:00:00 CST”,而我希望它包含“2017-02-01”
谁能解释一下?
【问题讨论】:
我阅读了lubridate 包中day 函数的描述,并试图了解它是如何工作的。这是我的例子:
library(lubridate)
test_date <- as.POSIXct('2017-02-28')
day(test_date) <-1
现在test_date 包含“2017-01-31 18:00:00 CST”,而我希望它包含“2017-02-01”
谁能解释一下?
【问题讨论】:
R 日期时间存储为 UTC(又名 GMT,又名 UCT)时间。当 as.POSIXct 只给出一个日期值时,它会自动假定为午夜。您的结果是在英格兰格林威治午夜显示“2017-02-01”作为您当地时区的时间(可能是美国东部标准时间)。我实际上无法在我的 Mac 上重现这种行为。我明白了:
> day(test_date) <- 1
> test_date
[1] "2017-02-01 PST"
不同的操作系统可能会以不同的方式处理它们的时区约定。开始的帮助页面是:
?DateTimeClasses
一些类 Unix 系统(尤其是 Linux 系统)没有设置环境变量 TZ,但有需要它的内部代码(如 POSIX)。我们已尝试解决此问题,但如果您得到意外结果,请尝试设置 TZ。请参阅 ?Sys.timezone 了解有效设置。
【讨论】: