r strptime(R版本3.2.2)

a_m*_*mcm 5 r strptime

对于带有"AM或PM"的文本字符串,使用strptime在R 3.0.2版中运行良好

> strptime("8/25/2015 6:38:41 PM", "%m/%d/%Y %I:%M:%S %p")
[1] "2015-08-25 18:38:41"
Run Code Online (Sandbox Code Playgroud)

我最近升级到R 3.2.2,现在发现这个推荐返回NA:

>strptime("8/25/2015 6:38:41 PM", "%m/%d/%Y %I:%M:%S %p")
[1] NA
Run Code Online (Sandbox Code Playgroud)

它似乎与"PM"有关.如果我删除"PM"并使用如下命令,它可以工作(但当然它解释为AM而不是PM):

>strptime("8/25/2015 6:38:41", "%m/%d/%Y %H:%M:%S")
[1] "2015-08-25 06:38:41 NZST"
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

更新:

谢谢大家的意见:

我重新安装了R 3.2.2但得到了同样的错误

>  strptime("8/25/2015 6:38:41 PM", "%m/%d/%Y %I:%M:%S %p")
[1] NA
Run Code Online (Sandbox Code Playgroud)

这是请求的会话信息

>  sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_New Zealand.1252  LC_CTYPE=English_New Zealand.1252   
[3] LC_MONETARY=English_New Zealand.1252 LC_NUMERIC=C                        
[5] LC_TIME=English_New Zealand.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
Run Code Online (Sandbox Code Playgroud)

然后我按相关帖子中的建议更改了语言环境

> Sys.setlocale(category="LC_TIME","C")
[1] "C"
> strptime("8/25/2015 6:38:41 PM", "%m/%d/%Y %I:%M:%S %p")
[1] "2015-08-25 18:38:41 NZST"
Run Code Online (Sandbox Code Playgroud)

它工作 - 但这是否意味着每次我想将文本时间转换为POSIXct类时我必须更改语言环境?

Aja*_*hri 1

尝试使用 hadleyverse 的 lubridate

library(lubridate)
arrive <- ymd_hms("2011-06-04 12:00:00", tz = "Pacific/Auckland")
arrive
## [1] "2011-06-04 12:00:00 NZST"
Run Code Online (Sandbox Code Playgroud)

https://cran.r-project.org/web/packages/lubridate/vignettes/lubridate.html