R:将Sys.now()转换为带有微秒的纪元时间戳

时间:2017-11-11 19:50:40

标签: r posixct

我想将当前时间转换为R中的微秒的纪元时间戳。为此,我运行以下代码。

options(digits.secs = 6)
now = Sys.time()    
as.double(now)

当我只是打印now时,输出为"2017-11-11 20:40:18.370305 CET",它捕获的是微秒,但是当我使用as.double(now)将其转换为纪元时间戳时,微秒精度就消失了。结果只有1510429218。如何保留微秒?

2 个答案:

答案 0 :(得分:0)

你(总是)拥有它们,但你需要告诉print使用更多数字:

R> n <- Sys.time()
R> print(as.numeric(n), digits=16)    ## digits matters here
[1] 1510432192.721936
R> n
[1] "2017-11-11 14:29:52.721935 CST"
R> 

答案 1 :(得分:0)

了解R如何非常难以处理十进制数字!请参阅以下代码。

options(digits.secs = 6)    
a = c(as.double(Sys.time()), as.double(Sys.time()), as.double(Sys.time()))
print(a)

此代码的输出如下。

[1] 1510430216 1510430216 1510430216

时间戳似乎已经失去了微秒精度。但是当数据写入文件或导出数据时,十进制数字是可见的。

df = data.frame(a)
write.csv(x = df, file = "test.csv")

该文件的内容是:

1 1510430215.888998
2 1510430215.889942
3 1510430215.889942

要查看R会话/控制台中的小数位数,还需要更改可见性选项。

options(digits = 16)
print(a)

现在所有十进制数字也在R会话中可见!

[1] 1510430215.888998 1510430215.889942 1510430215.889942

默认显示位数仅为7.因此,如果数字大于该数字,则R只选择丢弃显示的十进制数字!这是荒谬的,因为它造成了大量的混乱。至少应保留一个或两个十进制数字。