2016-12-07 94 views
0

我有一个用hhmmss.mm写成的时间格式,例如从表格导入的225014.09。 这是地震时间。我想将它转换成R中的22:50:14(:09?)。如何将hhmmss.mm中的时间格式转换为R中的正常时间?

我不知道用毫秒来做什么。它应该是上面的方式。谁能帮我吗?我已经搜索和搜索,但无法找到答案。

+0

'as.POSIXct('225014.09',tz ='UTC',format ='%H%M%OS')',尽管这会插入今天的日期。 – alistaire

+0

如果你不关心/想要一个日期时间对象,你可以通过分割和插入冒号来创建字符串:'t < - 225014.09; paste0(substr(t,1,2),“:”,substr(t,3,4),“:”,substr(t,5,6))' – SymbolixAU

+0

字符串的正则表达式版本:'gsub('( ...)(..)(..)\\。(。+)','\\ 1:\\ 2:\\ 3(:\\ 4)','225014.09')' – alistaire

回答

1

一般有两种规则是:

  1. 不要使用正则表达式解析日期和时间
  2. 按照规则1.

在所有的严重性,使用日期时间解析器其中R有很多。但这里的一个关键是你有一个时间而不是一个日期所以你还不能解析为日期时间

所以做这样的事情:

R> tstr <- "225014.09" 
R> dtstr <- paste("2026-01-01", tstr) # which date does not matter 
R> pt <- anytime(dtstr)    # now it is parsed 
R> pt 
[1] "2026-01-01 22:50:14.08 CST" 
R> tstr <- "225014.09" 
R> dtstr <- paste("2016-01-01", tstr) # which date does not matter 
R> pt <- anytime(dtstr)    # now it is parsed 
R> pt 
[1] "2016-01-01 22:50:14.08 CST" 
R> hhmmss <- format(pt, "%H:%M:%OS") 
R> hhmmss 
[1] "22:50:14.089999" 
R> 

现在我们的首选HH:MM:SS.FF以分数秒 - 我的默认,但你可以微调:

R> options(digits.secs=2) 
R> hhmmss <- format(pt, "%H:%M:%OS") 
R> hhmmss 
[1] "22:50:14.08" 
R> 

'09'四舍五入为'08'的事实是浮点数学中的一种,不能通过解析或格式化来改变 - 它是底层表示的限制。

+0

非常感谢您的详细解答和示例! – Angel

+0

欢迎您,欢迎来到StackOverflow。你现在可以'接受'这个答案(点击标记)和/或'upvote'(点击面朝上的三角形)。 –

相关问题