Подтвердить что ты не робот

Преобразование даты из POSIXct в Date в R

может кто-нибудь сказать мне, почему R дает такой результат ниже:

> as.POSIXct("2013-01-01 08:00")
[1] "2013-01-01 08:00:00 HKT"
> as.Date(as.POSIXct("2013-01-01 08:00"))
[1] "2013-01-01"
> as.POSIXct("2013-01-01 07:00")
[1] "2013-01-01 07:00:00 HKT"
> as.Date(as.POSIXct("2013-01-01 07:00"))
[1] "2012-12-31"

Должно ли это быть 2013-01-01 после преобразования POSIXct в Date для 2013-01-01 07:00, есть ли способ изменить обрезание от 08:00 до 00:00?

Обновление # 1

Я нашел следующее, чтобы исправить мою проблему, но менее аккуратным способом

> as.Date(as.character(as.POSIXct("2013-01-01 07:00")))
[1] "2013-01-01"
4b9b3361

Ответ 1

Проблема здесь в часовых поясах - вы можете видеть, что вы находитесь в "HKT". Попробуйте:

as.Date(as.POSIXct("2013-01-01 07:00", 'GMT'))
[1] "2013-01-01"

От ?as.Date(): [ "POSIXct" ] преобразуется в дни, игнорируя время после полуночи в представлении времени в заданном часовом поясе, по умолчанию UTC

Ответ 2

Используйте параметр часового пояса as.Date:

as.Date(as.POSIXct("2013-01-01 07:00",tz="Hongkong"))
#[1] "2012-12-31"

as.Date(as.POSIXct("2013-01-01 07:00",tz="Hongkong"),tz="Hongkong")
#[1] "2013-01-01"

Фактически, я рекомендую всегда использовать параметр tz при использовании функций преобразования даты и времени. Есть и другие неприятные сюрпризы, например. с летним временем.