从POSIXlt对象中减去时间

时间:2016-12-19 16:39:17

标签: r datetime posixct posixlt

我试图从这个定义为01:00的时间对象中减去一小时(3600秒)。当我这样做时,时间组件消失了,我只剩下日期。我需要保留时间组件 - 我该怎么做?仅当我的减法结果为00-00时才会发生这种情况。

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"

1 个答案:

答案 0 :(得分: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-%m-%d%H:%M:%S”,并且“%Y-%m-%d “否则

由于@MrFlick在注释中声明,您可以通过指定格式字符串...

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