2012-11-28 54 views
9

我该如何解析这个日期格式?我应该改变这个冒号点吗?或者有人知道更好的解决方案?冒号以秒和毫秒为单位的日期格式。如何解析R?

> x <- "2012.01.15 09:00:02:002" 
> strptime(x, "%Y.%m.%d %H:%M:%S:%OS") 
[1] "2012-01-15 09:00:02" 
> strptime(x, "%Y.%m.%d %H:%M:%OS") 
[1] "2012-01-15 09:00:02" 
> x <- "2012.01.15 09:00:02.002" 
> strptime(x, "%Y.%m.%d %H:%M:%OS") 
[1] "2012-01-15 09:00:02.001" 
+0

这两个答案都是正确的+1!但个人我prefere gsubfn:D –

+1

你真的知道过去的最后冒号数字是小数秒吗?它可能是其他的东西,比如框架。 – John

回答

8

这里有一个微妙的区别,可能会把你扔掉。 作为?strptime笔记:

关于 'strptime' '%OS' 将输入秒包括小数秒。

要强调的是一个位,%OS表示包括分数秒---不只是分数部分秒的:如果秒值是44.234,%OS%OS3表示44.234,不是.234

所以解决方案的确是用.代替最终的:

这里是你可以做的一个方法:

x <- "2012.01.15 09:00:02:002" 
strptime(gsub(":", ".", x), "%Y.%m.%d %H.%M.%OS") 
+0

+1。我认为OP已经知道所有这些 - 你会注意到他(他)在他尝试的最后一件事情中使用了这个事实 - 但它可能对可能会遇到这个问题的其他人有用。 – ruakh

+0

@ruakh - 好点,我怀疑你是对的。我喜欢''strptime'的引用使得这个观点更加明确。 –

+0

确实,我已将冒号转换为点。 Thx快速回复:) –

2

strptime(gsub(":", ".", x), "%Y.%m.%d %H.%M.%OS3") 

作弊?

+0

'sub'只会用'.'替代':'的第一个实例,而不是每个实例。你需要'gsub'作为@ JoshO'Brien的回答 – Justin

+0

@Justin:我想我已经在你评论的时候已经解决了这个问题,但是谢谢。 :-) – ruakh

相关问题