【问题标题】:Why is lubridate adding 1 second to an 'MS' (minute-second) time with a decimal after converting?为什么 lubridate 在转换后将 1 秒添加到带有小数的“MS”(分秒)时间?
【发布时间】:2018-04-05 03:53:28
【问题描述】:

当我没有小数时,没关系:

time = parse_date_time('5:55', 'MS')
second(time)
# 55

当我添加一个小数时,它会减少 1

time = parse_date_time('5:55.34', 'MS')
second(time)
# 56.34

它显然检测到了我最初的小数位,但它似乎仍在将个位四舍五入。

这是预期的行为吗?

额外信息:

  • 这发生在 Windows 10 上的 1.7.11.7.3 两个版本中

  • 这发生在1.7.1Mac OS Sierra 中

【问题讨论】:

  • 你为什么不在格式部分使用;
  • 这可能是parse_date_time 中的一个错误。我最初认为这是as.POSIXlt(time)$sec 操作引入的舍入错误,但我现在发现这种行为在所有情况下都会发生。由于 lubridate 的默认行为是四舍五入,我只能想象它不知道如何处理毫秒格式,并且 MS 是分钟和秒,但不需要小数。我尝试了小数秒的各种选项,但它仍然增加了鬼秒。这令人沮丧!你已经知道了:)
  • 您确定您运行的是最新版本的 lubridate 吗?当我运行完全相同的命令时,我得到正确的结果 55.34 (packageVersion("lubridate") return "1.7.3")
  • 我在运行1.7.1,但是当我升级到1.7.3 时,仍然出现该错误。

标签: r datetime lubridate


【解决方案1】:

你不应该使用ms吗?

library(lubridate)

time = ms('5:55.34')
second(time)
#[1] 55.34

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2012-06-15
    • 2015-06-02
    • 2011-09-01
    相关资源
    最近更新 更多