В R как .POSIXlt и strptime требуют разных форматов? - PullRequest
0 голосов
/ 11 мая 2018

Рассмотрим следующий вывод консоли R.

> Sys.getlocale()
[1] "LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C"
> dh <- '2018-05-08 07:42:34 PM'
> as.POSIXlt(dh,'%Y-%m-%d %I:%M:%S %p')
[1] "2018-05-08 07:42:34"
> strptime(dh,'%Y-%m-%d %I:%M:%S %p')
[1] "2018-05-08 19:42:34 -03"

Если оба формата идентичны, почему as.POSIXlt не распознает 12-часовой формат должным образом?dh дает время ночью (7 часов вечера), но функция возвращает время утром!as.POSIXct выдает ту же ошибку.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 11 мая 2018

Фактическая ошибка, кажется, в строке;

as.POSIXlt(dh, '%Y-%m-%d %I:%M:%S %p')

Это должно быть как:

as.POSIXlt(dh, format= '%Y-%m-%d %I:%M:%S %p')
#[1] "2018-05-08 19:42:34 BST"

2-й аргумент для strptime - format.Следовательно, strptime(dh,'%Y-%m-%d %I:%M:%S %p') работает нормально, так как считает второй аргумент format.

Но вторым аргументом для as.POSIXlt является tz.Следовательно, текст, предоставленный для рассмотрения как format, принимается за tz и используется значение по умолчанию format.Это привело к неожиданному значению.

...