2016-12-19 18 views
1

Я пытаюсь вычесть час (3600 секунд) из этого объекта времени, который определен как 01:00. Когда я это делаю, компонент времени исчезает, и я остаюсь только с датой. Мне нужно сохранить компонент времени - как мне это сделать? Это происходит только тогда, когда результат моего вычитания равен 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 делает изменение структуры (от POSIXlt до POSIXct) ...

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" 
+0

Отлично. Благодарим Вас за разъяснения. Это на него отвечает. – SilvanD