Преобразование даты из 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"
Ответы
Ответ 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
при использовании функций преобразования даты и времени. Есть и другие неприятные сюрпризы, например. с летним временем.