在 R 中转换 POSIXct 会在 3.5.0 版中产生 NA [重复]

Posted

技术标签:

【中文标题】在 R 中转换 POSIXct 会在 3.5.0 版中产生 NA [重复]【英文标题】:Converting POSIXct in R yields NA in version 3.5.0 [duplicate] 【发布时间】:2018-12-07 16:14:50 【问题描述】:

这是我的代码:

last_date <- "Tue, 26 Jun 2018 08:58:10 -0700 (PDT)"
as.Date(as.POSIXct(last_date, format = "%a, %d %b %Y %H:%M:%S %z"))

结果是

[1] NA

版本信息:

platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          5.0                         
year           2018                        
month          04                          
day            23                          
svn rev        74626                       
language       R                           
version.string R version 3.5.0 (2018-04-23)
nickname       Joy in Playing       

当我在另一台计算机(R 版本 3.4.0)上尝试相同的代码时,结果正如预期的那样,

[1] "2018-06-26"

关于如何解决这个问题的任何想法?谢谢。

【问题讨论】:

我无法重现您的错误,我尝试了您的代码,得到的是:[1] "2018-06-26"。我有和你一样的R 版本。 结果是什么:Sys.getlocale("LC_TIME") "Portuguese_Brazil.1252". 【参考方案1】:

我认为你的本地时间语言不是英语......所以它会失败:

您的解决方案:

Sys.setlocale("LC_TIME", "C")
last_date <- "Tue, 26 Jun 2018 08:58:10 -0700 (PDT)"
as.Date(as.POSIXct(last_date, format = "%a, %d %b %Y %H:%M:%S %z"))

结果:

[1] "2018-06-26"

注意:您可能必须将其设置回原来的位置以执行其他任务。在这种情况下,要么重新启动 R,要么执行:

store_loctime <- Sys.getlocale("LC_TIME")
Sys.setlocale("LC_TIME", "C")
# Your code

Sys.setlocale("LC_TIME", store_loctime)

【讨论】:

像魅力一样工作!谢谢!

以上是关于在 R 中转换 POSIXct 会在 3.5.0 版中产生 NA [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用 as.POSIXct 为相同的字符结构提供 na

使用 Date/POSIXct 列(base R)将 ts 对象转换为数据框

R 在 DST 时间变化前后不一致地转换时间

如何在 R 中解析年 + 周数?

在 R 中使用 dplyr::if_else() 根据另一个变量的值更改 POSIXct 时间戳的时区

找到R中两个时间范围(POSIXct)之间的平均值