转换时间戳而不添加yyyy-mm-dd

时间:2019-03-15 19:49:00

标签: r timestamp lubridate

我想将时间戳从字符转换为时间,但是我不希望有任何日期。最重要的是,它必须显示毫秒,例如“ 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"

谢谢。

1 个答案:

答案 0 :(得分:0)

也许hms包可以完成OP的期望。 hms 基于'difftime'类,实现一个S3类,用于存储和格式化日期时间值。

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的{​​{1}}函数:

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 包中的ITime类是一个时间类,它存储一天中的整数秒数。因此,它无法处理毫秒。