【问题标题】:Convert timestamps without adding yyyy-mm-dd转换时间戳而不添加 yyyy-mm-dd
【发布时间】:2019-08-06 22:57:15
【问题描述】:

我想将时间戳从字符转换为时间,但我不想要任何日期。最重要的是,它必须显示毫秒,如 "hh:mm:ss,os"。

如果我使用as.POSIXCT,它总是会在我的时间戳中添加一个日期前缀,这不是我的意图。我还检查了lubridate 包,但我似乎找不到超出“as.hms”的函数,因此它以毫秒为单位显示至少两位数。

使用 POSIXct 的示例

df <-c("01:31:12.20","01:31:14.56","01:31:14.84")

options(digits.secs = 2)
df <- as.POSIXct(df, format="%H:%M:%OS")

这是结果:

[1] "2019-03-15 01:31:12.20 EDT" "2019-03-15 01:31:14.55 EDT"
[3] "2019-03-15 01:31:14.83 EDT"

谢谢。

【问题讨论】:

  • 不幸的是它不起作用,因为 chron() 函数格式也是“hh:mm:ss”,它没有毫秒。
  • 日期时间也需要日期,如果我理解的话
  • 是的。我将编辑“日期”位。
  • 好的,那么不清楚你真正想要什么,因为hms(df) 将其转换为Period 类
  • @goncaloveiga 您需要日期才能按时执行计算。然后您可以使用format 重新格式化您的数据。

标签: r timestamp lubridate


【解决方案1】:

也许,hms 包可以满足 OP 的预期。 hms 实现了一个 S3 类,用于存储和格式化基于 'difftime' 类的时间值。

library(hms)
as.hms(df)
01:31:12.200000
01:31:14.560000
01:31:14.840000

可用于计算,例如,

diff(as.hms(df))
00:00:02.360000
00:00:00.280000

请注意print() 和format() 方法不接受其他参数并且不尊重options(digits.secs = 2)。


hms 类类似于lubridate 的as.hms() 函数,它创建一个周期对象:

lubridate::hms(df)
[1] "1H 31M 12.2S"  "1H 31M 14.56S" "1H 31M 14.84S"

算术也可以:

diff(lubridate::hms(df))
[1] 2.36 0.28

请注意,时间、日期和日期时间对象的内部表示通常基于数字类型,以便进行计算。打印对象时,内部表示与字符串不同。


data.table 包中的ITime 类是一个时间类,它存储一天中的整数秒数。所以,它不能处理毫秒。

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 2014-06-11
    相关资源
    最近更新 更多