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