Чтение дат с as.Date из символа %d%b%Y

Это работает:

as.Date("22JAN2010", format="%d%b%Y")
>"2010-01-22"

Это не:

as.Date("22MAR2010", format="%d%b%Y")
>NA

Он прерывается в марте, мае, октябре и работает в январе, феврале, апреле, июне, июле, августе, сентябре, ноябре, декабре.

По совпадению, мой язык ОС Windows 7 — голландский, для которого аббревиатуры даты будут MAA, MEI, OKT. Но и они не работают.


person DaReal    schedule 24.02.2017    source источник
comment
Также работает на OS X.   -  person joran    schedule 24.02.2017
comment
Пробовали as.Date("22MAR2010", format="%d%b%Y", tz="UTC") ?   -  person rbm    schedule 24.02.2017
comment
измените свой язык с помощью Sys.setlocale(LC_TIME = 'en_GB.UTF-8')   -  person Jaap    schedule 24.02.2017
comment
as.Date("22MAR2010", format="%d%b%Y", tz="UTC") Также дал NA. > Sys.setlocale(LC_TIME = 'en_GB.UTF-8') Error in Sys.setlocale(LC_TIME = "en_GB.UTF-8") : unused argument (LC_TIME = "en_GB.UTF-8")   -  person DaReal    schedule 24.02.2017
comment
stackoverflow.com/ вопросы/15566875/   -  person CClaire    schedule 24.02.2017
comment
@CClaire, это оно, спасибо! Не появилось в поиске SO для меня.   -  person DaReal    schedule 24.02.2017
comment
Извините, правильный должен быть: Sys.setlocale('LC_TIME','en_GB.UTF-8')   -  person Jaap    schedule 24.02.2017


Ответы (1)


Вы можете узнать, какие ежемесячные сокращения будут распознаваться с помощью встроенного объекта данных: month.abb, интернационализированного.

 month.abb
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

Функция sessionInfo() также возвращает локаль, которая для меня:

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

... и мог бы получить этот единственный вектор с помощью Sys.getlocale(), но я подозреваю, что вы установили что-то еще. Как прокомментировал @Jaap, значение находится под вашим контролем с помощью Sys.setlocale. Конкретное значение элемента «LC_TIME» должно использоваться функцией strptime, которая лежит в основе функции as.Dat.character.

(Функция Sys.setlocale имеет 2 именованных аргумента «категория» и «локаль», поэтому первое предложение использовать Sys.setlocale(LC_TIME = "en_GB.UTF-8") не удалось. На мой взгляд, это также типичный синтаксис R, поскольку обычный формализм парного списка не заключает имена в кавычки. Я совершал эту ошибку много раз.)

person IRTFM    schedule 24.02.2017