【问题标题】:Sys.Date() with as.POSIXct()Sys.Date() 和 as.POSIXct()
【发布时间】: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”

【问题讨论】:

    标签: r posixct


    【解决方案1】:

    先将 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"
      

    【讨论】:

    • 这太棒了!
    猜你喜欢
    • 2012-01-21
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多