【问题标题】:Why does R add non-existing microseconds/nanoseconds to date-time objects?为什么 R 将不存在的微秒/纳秒添加到日期时间对象?
【发布时间】:2021-10-03 11:11:28
【问题描述】:

我有日期时间格式为"%d-%b-%Y %H:%M:%S.%OS", 例如"25-Apr-2021 18:31:56.234", 也就是毫秒的精度。 当将其解析为时间对象时,我看到值不一样,有时它会增加 1 微秒或减少它,或者类似的事情。 为什么会这样,该怎么办? 我想要一个正好是 56 秒和 234 毫秒的时间对象! (如果需要增加更高的精度,则在此之后归零

例如,当我调用print(as.numeric(), digits=20) 命令时它打印的一些值:"1615310444.7509999 1615310442.5550001", 或者当我询问某些 2 个值之间的差异时,它会给出:"Time difference of 0.003999949 secs" 例如。

【问题讨论】:

  • 你能展示一个可重现的例子吗?
  • 例如,当我调用 print(as.numeric(), digits=20) 命令时它打印的一些值:“1615310444.7509999 1615310442.5550001”,或者当我询问一些 2 个值之间的差异时,它给出:例如“0.003999949 秒的时间差”。
  • @Vladimir 由于选项数字以秒为单位,四舍五入正在发生。请参阅我的答案以供参考。

标签: r posixct posixlt


【解决方案1】:

您可以使用选项(digits.secs)来显示毫秒。下面是一个例子。 digits.secs 必须设置为零。另请注意,您应该更改日期的格式

> dp <- options(digits.secs=0)
> dp
$digits.secs
[1] 0

> strptime("25-Apr-2021 18:31:56.234", format = "%d-%b-%Y %H:%M:%OS")
[1] "2021-04-25 18:31:56 +08"
> dp <- options(digits.secs=3)
> dp
$digits.secs
[1] 0

> strptime("25-Apr-2021 18:31:56.234", format = "%d-%b-%Y %H:%M:%OS")
[1] "2021-04-25 18:31:56.234 +08"

【讨论】:

  • 但这只会改变时间对象的打印方式,不会改变我的时间对象内部添加了一些“垃圾”微/纳秒的事实,这是真的,因为我们可以看到它在 print(as.numeric(), digits=20) 表示中,对吗?
  • @Vladimir - 另一种尝试方法是尝试 as.integer(date time object) 这将帮助您以毫秒为单位计算所有内容。
猜你喜欢
  • 2022-06-13
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 2017-10-29
  • 2015-07-20
  • 1970-01-01
相关资源
最近更新 更多