2016-12-19 60 views
1

我想從定義爲01:00的這個時間對象中減去一小時(3600秒)。當我這樣做時,時間部分消失,我只剩下日期。我需要保留時間部分 - 我該怎麼做?這隻發生在我的減法結果是00-00時。從POSIXlt對象中減去時間

test <- strptime("2016-09-02_01-00", format = "%Y-%m-%d_%H-%M", tz = "UTC") 
test 
[1] "2016-09-02 01:00:00 UTC" 
test-3600 
[1] "2016-09-02 UTC" 
+2

的時間成分仍然存在,它只是不打印所有日期的矢量有時間午夜。如果你想強制顯示一個格式,可以使用'strftime()'或'format()'或其他東西。 – MrFlick

+1

這也記錄在'?strptime'下*如果任何元素的時間部分不是午夜,格式方法的默認值是「%Y-%m-%d%H:%M:%S」,並且「 %Y-%m-%d「否則*」 –

回答

3

這是內容和表示之間的區別。

fmt <- "%Y-%m-%d_%H-%M" 
test <- strptime("2016-09-02_01-00", 
    format = fmt, tz = "UTC") 
str(test) 
## POSIXlt[1:1], format: "2016-09-02 01:00:00" 

減去3600 確實變化的結構(從POSIXltPOSIXct)...

str(test-3600) 
## POSIXct[1:1], format: "2016-09-02" 

...但在格式的變化僅僅是由於與R嘗試是有益的,印刷最簡單的表示形式。時間信息並沒有真正消失。從?strptime(感謝@DavidArenburg):

默認的格式的方法是 「%Y-%間 - %d%H:%M:%S」,如果任何元件具有時間分量這是不午夜和「%Y-%間%d」,否則

正如評論@MrFlick狀態,您可以通過指定格式字符串覆蓋此...

fmt2 <- "%Y-%m-%d %H:%M:%S" 
format(test-3600,fmt2) 
## [1] "2016-09-02 00:00:00" 
+0

優秀。感謝您的澄清。這回答了它。 – SilvanD