【发布时间】:2021-02-13 16:44:03
【问题描述】:
试图在 POSIXct 类中获取当前日期。我尝试了以下方法:
as.POSIXct(Sys.Date(), format = "%m/%d/%y", tz = "EST")
得到了
[1]“2021-02-12 19:00:00 EST”
我希望只获得没有时间的日期,但在 POSIXct 类中。例如:
[1]“2021-02-12”
【问题讨论】:
试图在 POSIXct 类中获取当前日期。我尝试了以下方法:
as.POSIXct(Sys.Date(), format = "%m/%d/%y", tz = "EST")
得到了
[1]“2021-02-12 19:00:00 EST”
我希望只获得没有时间的日期,但在 POSIXct 类中。例如:
[1]“2021-02-12”
【问题讨论】:
先将 Date 类对象转换为字符:
as.POSIXct(format(Sys.Date()))
## [1] "2021-02-13 EST"
更短的是:
trunc(Sys.time(), "day")
## [1] "2021-02-13 EST"
注意:
POSIXct 对象在内部存储为自 Epoch 以来的秒数,而不是单独的日期和时间,因此它们总是有时间;但是,如果这里的时间是午夜,那么使用默认格式打印时它不会显示。
如果您只需要 Date 通常最好使用 Date 类,因为如果您不小心,使用 POSIXct 类可能会导致微妙的时区错误,如果您不小心,通常没有理由让自己暴露于这种潜力不需要。
如果您更改会话的时区,那么它不会在没有时间的情况下显示,因为一个时区的午夜不是其他时区的午夜。
x <- as.POSIXct(format(Sys.Date()))
x
## [1] "2021-02-13 EST"
# change time zone
Sys.setenv(tz = "GMT")
x
## [1] "2021-02-13 05:00:00 GMT"
# change back
Sys.setenv(tz = "")
x
## [1] "2021-02-13 EST"
【讨论】: