2016-12-07 56 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'(點擊面朝上的三角形)。 –

相關問題