代码之家  ›  专栏  ›  技术社区  ›  Hakki

r润滑YMD hms毫秒差

  •  1
  • Hakki  · 技术社区  · 7 年前

    在时间转换中是否有我遗漏的内容?非常简单的例子:

    library(lubridate)
    time <- "2019-01-14 10:58:23.438000"
    
    op <- options(digits.secs=6)
    ymd_hms(time, tz = "Europe/Helsinki")
    [1] "2019-01-14 10:58:23.437 EET"
    
    ymd_hms(time)
    [1] "2019-01-14 10:58:23.437 UTC"
    

    为什么毫秒一关在这里?似乎不是四舍五入的问题?

    虽然这似乎有效:

    time <- "2019-01-14 10:58:23.123456"
    
    op <- options(digits.secs=6)
    
    ymd_hms(time)
    [1] "2019-01-14 10:58:23.123456 UTC"
    

    会话信息

    sessionInfo()
    R version 3.5.1 (2018-07-02)
    Platform: x86_64-w64-mingw32/x64 (64-bit)
    Running under: Windows >= 8 x64 (build 9200)
    
    Matrix products: default
    
    locale:
    [1] LC_COLLATE=Finnish_Finland.1252  LC_CTYPE=Finnish_Finland.1252    LC_MONETARY=Finnish_Finland.1252 LC_NUMERIC=C                    
    [5] LC_TIME=Finnish_Finland.1252    
    
    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base     
    
    other attached packages:
    [1] lubridate_1.7.4
    
    loaded via a namespace (and not attached):
    [1] compiler_3.5.1 magrittr_1.5   tools_3.5.1    yaml_2.2.0     Rcpp_1.0.0     stringi_1.2.4  stringr_1.3.1 
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Mako212    7 年前

    编辑: 这个答案 Milliseconds in POSIXct Class 解决正在发生的问题 POSIXct

    (请注意,您会得到舍入错误,而R的日期时间格式总是向下舍入,因此如果您显示的小数位数较少,则有时可能会丢失一毫秒。)


    问题似乎存在于 ymd_hms 而且 as.POSIXct .

    如果我打电话 strptime 直接或使用 as.POSIXlt ,毫秒分析正确:

    strptime(time, "%Y-%m-%d %H:%M:%OS", tz = "Europe/Helsinki")
    
    as.POSIXlt(time, "%Y-%m-%d %H:%M:%OS", tz = "Europe/Helsinki")
    

    这些选项中的任何一个都可以解决您的问题。

    "2019-01-14 10:58:23.438 EET"
    

    POSIXlt 位置CT 但行为却不同:

    as.POSIXlt(time, "%Y-%m-%d %H:%M:%OS", tz = "Europe/Helsinki") %>% 
      format(., "%Y-%m-%d %H:%M:%OS6")
    
    [1] "2019-01-14 10:58:23.438000"
    
    as.POSIXct(time, "%Y-%m-%d %H:%M:%OS", tz = "Europe/Helsinki") %>% 
      format(., "%Y-%m-%d %H:%M:%OS6")
    
    [1] "2019-01-14 10:58:23.437999"
    
    推荐文章