2017-12-13 18 views
0

を考えると、2つの日付/時刻:計算日付/時間差、Yを返す:M:DH:M:S

dt_1 <- lubridate::ymd_hms("2016:08:26 11:29:07") 
dt_2 <- lubridate::ymd_hms("2016:07:29 09:29:00") 

がどのように私は1つから他への差を計算し、出力として返すん:

dt_1 - dt_2 

戻り値:

> "0:0:28 2:0:7"  # 28 days, 2 hours, and 7 seconds difference 

のlubridateアプローチを用いて

> Time difference of 28.08341 days 

この出力をy:m:d h:m:s形式にするにはどうすればよいですか?私は検索しましたが運がありません!

ありがとうございます。

UPDATE!

@Sotosによって以下に説明されている解決策が現れ、私はうまくいきません。コードを使用:

dt_1 <- lubridate::ymd_hms("2001:1:1 2:0:0") 
dt_2 <- lubridate::ymd_hms("2004:1:1 1:0:0") 

paste(
paste(
year(as.period(int_diff(c(dt_2, dt_1)))), 
month(as.period(int_diff(c(dt_2, dt_1)))), 
day(as.period(int_diff(c(dt_2, dt_1)))), 
sep = ":"), 
paste(
hour(as.period(int_diff(c(dt_2, dt_1)))), 
minute(as.period(int_diff(c(dt_2, dt_1)))), 
second(as.period(int_diff(c(dt_2, dt_1)))), 
sep = ":"), 
sep = " ") 

Rは負の日を返します。 "3:0:-1 23:0:0"

私の人生にとって、なぜこれが起こっているのか、それを回避する方法はできません。正解は「2:11:30 23:0:0」(または2年11ヶ月30日23時間0秒0)にする必要があります。

アドバイスはありますか?

+1

ああ、よく恥ずかしいほど簡単でした。ありがとう! – Ross

答えて

0

興味のある方。必要な出力は、次のコマンドを実行することで返されます。

paste(
paste(
    year(as.period(int_diff(c(dt_2, dt_1)))), 
    month(as.period(int_diff(c(dt_2, dt_1)))), 
    day(as.period(int_diff(c(dt_2, dt_1)))), 
sep = ":"), 
paste(
    hour(as.period(int_diff(c(dt_2, dt_1)))), 
    minute(as.period(int_diff(c(dt_2, dt_1)))), 
    second(as.period(int_diff(c(dt_2, dt_1)))), 
sep = ":"), 
sep = " ") 

より早い日付/時刻が最初に表示されるようにしてください。

0

as.periodを使用すると、数字をピリオドに変換できます。文書から、

as.periodは時代のクラスオブジェクトへの間隔、所要時間、difftimeと数値クラスのオブジェクトを変更し、指定された単位と

だからあなたはただ、as.periodで、すなわち、すべてをラップする必要があります

lubridate::as.period(dt_1 - dt_2) 
#[1] "28d 2H 0M 7S"