2016-02-19 135 views
0

如何將小數轉換爲天,小時,分和秒?將小數轉換爲R,日分,小時和秒

十進制將顯示的分鐘數,我想將其轉換成任何它說「X days, Y hours, Z minutes and W seconds」的字符串,或顯示「DD:HH:MM:SS

我已經找到了幾個帖子相似,但其中沒有一個是在R

做過到目前爲止,我的代碼是:

seconds=55800 
lengths=strftime(as.POSIXct(seconds, origin = Sys.Date(), tz = "UTZ"), format = "%d %H:%M:%S") 

我需要一個新的原點但是。由於55800秒爲15.5小時,結果顯示19日15小時30分鐘,因爲起源基於今天的日期(19日)。我需要以某種方式創建一個通用的原點。

+2

請給出一個例子和預期輸出 – akrun

+1

做一些除法和乘法是否如此複雜? – Tensibai

+0

我已經添加了我的代碼,並且我知道這個問題是什麼,而不是如何解決它。之前我沒有包括它,因爲我確信可以採用更有說服力的方式。 @Tensibai - 不,不是,誰說這是? – sym246

回答

1

問題是輸入是分鐘數,但代碼以秒開始。我已經假設了幾分鐘。

1)計算的天數,然後將轉換的分鐘數到POSIXct和產生使用sprintf的字符串。沒有包被使用。

# input 
mins <- 55800/60 

days <- mins %/% (24 * 60) 
ct <- as.POSIXct(60 * mins, origin = "1970-01-01", tz = "UTC") # POSIXct 
sprintf("%02d:%s", days, substring(ct, 12)) 

## [1] "00:15:30:00" 

2)使用克隆氏病,並從它上面days略短,並且避免了潛在的時間段錯誤:

library(chron) 
sprintf("%02d:%s", days, times(chron(mins/(24 * 60)))) 
## [1] "00:15:30:00" 

更新:固定/簡化。新增(2)。

+0

我在原始文章中看到了我的分鐘/秒的位置 - 我使用哪一個並不重要。但是,5000分鐘等於3天11小時20分鐘 - 不是3天6小時20分鐘...(或55800不是10小時30分鐘的最新編輯) – sym246

+0

已修復。 55800秒是930分鐘,即15.5小時。 –

+0

非常感謝 – sym246

1

lubridate軟件包具有各種幫助程序,對於類似的用例很方便。

> require(lubridate) 
> seconds_to_period(55800) 
[1] "15H 30M 0S" 
相關問題