R的lubridate包创建日期时间时会忽略午夜时间

6

我正在尝试使用lubridate包创建日期时间,我已经尝试了以下值:

library(lubridate)
ymd_hms("2017-07-02 23:00:00")
[1] "2017-07-02 23:00:00 UTC"
ymd_hms("2017-07-02 00:00:00")
[1] "2017-07-02 UTC"

看起来如果您在午夜12点输入时间00:00:00,则ymd_hms()方法会忽略时间值,结果变成日期。有没有办法在结果中显示00:00:00?非常感谢!


1
有趣。看起来是包里的一个错误。如果将日期连接起来,则会显示午夜时间:ymd_hms(c("2017-07-02 23:00:00", "2017-07-02 00:00:00")) - RHertel
这非常有趣!我还在探索中。 - ACuriousCat
另外,我尝试创建一个时间为23:59:59的日期时间,并添加1秒钟,但它仍然不显示00:00:00。test <- ymd_hms("20180303 23:59:59") test "2018-03-03 23:59:59 UTC" test + seconds(1) "2018-03-04 UTC" - ACuriousCat
2个回答

4

我刚刚通过谷歌搜索和尝试解决错误,得出了这个问题的答案:

mydates <- format(as.POSIXct("2011-01-01 00:00:00", tz = "UTC"), "%m-%d-%Y %H:%M:%S")
mydates
[1] "01-01-2011 00:00:00"
format(as.POSIXct("2011-01-01 00:00:00", tz = "UTC"), "%m-%d-%Y %H:%M:%S")
[1] "01-01-2011 00:00:00"

似乎使用 R Base 的 as.POSIXct 函数并带上格式参数就可以了。

2
打印出来的不同,但对象仍然是一个POSIXct类型的对象:
library(lubridate)
#> 
#> Attachement du package : 'lubridate'
#> The following object is masked from 'package:base':
#> 
#>     date
library(magrittr)

ymd_hms("2017-07-02 23:00:00")%>% 
  class()
#> [1] "POSIXct" "POSIXt"

ymd_hms("2017-07-02 00:00:00") %>% 
  class()
#> [1] "POSIXct" "POSIXt"

此代码示例由 reprex软件包 (v0.2.0)于2018-07-05创建。

devtools::session_info()
#> Session info -------------------------------------------------------------
#>  setting  value                       
#>  version  R version 3.4.4 (2018-03-15)
#>  system   x86_64, darwin15.6.0        
#>  ui       X11                         
#>  language (EN)                        
#>  collate  fr_FR.UTF-8                 
#>  tz       Europe/Paris                
#>  date     2018-07-05
#> Packages -----------------------------------------------------------------
#>  package   * version date       source                          
#>  backports   1.1.2   2017-12-13 CRAN (R 3.4.3)                  
#>  base      * 3.4.4   2018-03-15 local                           
#>  compiler    3.4.4   2018-03-15 local                           
#>  datasets  * 3.4.4   2018-03-15 local                           
#>  devtools    1.13.6  2018-06-27 CRAN (R 3.4.4)                  
#>  digest      0.6.15  2018-01-28 CRAN (R 3.4.3)                  
#>  evaluate    0.10.1  2017-06-24 CRAN (R 3.4.1)                  
#>  graphics  * 3.4.4   2018-03-15 local                           
#>  grDevices * 3.4.4   2018-03-15 local                           
#>  htmltools   0.3.6   2017-04-28 CRAN (R 3.4.0)                  
#>  knitr       1.20    2018-02-20 CRAN (R 3.4.3)                  
#>  lubridate * 1.7.4   2018-04-11 CRAN (R 3.4.4)                  
#>  magrittr  * 1.5     2014-11-22 CRAN (R 3.4.0)                  
#>  memoise     1.1.0   2017-04-21 CRAN (R 3.4.0)                  
#>  methods   * 3.4.4   2018-03-15 local                           
#>  Rcpp        0.12.17 2018-05-18 CRAN (R 3.4.4)                  
#>  rmarkdown   1.10    2018-06-11 CRAN (R 3.4.4)                  
#>  rprojroot   1.3-2   2018-01-03 CRAN (R 3.4.3)                  
#>  stats     * 3.4.4   2018-03-15 local                           
#>  stringi     1.2.3   2018-06-12 CRAN (R 3.4.4)                  
#>  stringr     1.3.1   2018-05-10 CRAN (R 3.4.4)                  
#>  tools       3.4.4   2018-03-15 local                           
#>  utils     * 3.4.4   2018-03-15 local                           
#>  withr       2.1.2   2018-06-01 Github (jimhester/withr@70d6321)
#>  yaml        2.1.19  2018-05-01 CRAN (R 3.4.4)

谢谢 Colin,我必须重新表达我的话,它看起来像一个日期,但我知道它是一个日期时间对象。只是它不显示00:00:00,但我有一种方法来格式化结果,以便它显示00:00:00。 - ACuriousCat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接