Sys.setlocale:设置区域设置的请求......无法被尊重
我在使用我的软件包的函数中使用了strptime(...)
。我需要使用特定的本地设置解析字符串,并使用Sys.setlocale
作为解决方法来获取英文本地化设置。为了减少副作用,以前的本地设置会在之后恢复。 函数的基本代码片段如下所示:Sys.setlocale:设置区域设置的请求......无法被尊重
#parameter settings
sometext <- "Mon, 14 Mar 2011 23:42:16 GMT"
timeFormat <- "%a, %d %b %Y %H:%M:%S"
timeZone <- "GMT"
#get current locale
loc <- Sys.getlocale("LC_TIME")
#set british localization
dummy <- Sys.setlocale("LC_TIME", "en_GB.UTF-8")
#parse datetime string
time <- strptime(sometext, format = timeFormat, tz= timeZone)
#set local back
dummy <- Sys.setlocale("LC_TIME", loc)
不幸的是,使用该功能时,我的一个同事得到以下警告:
In Sys.setlocale("LC_TIME", "en_GB.UTF-8") :
OS reports request to set locale to "en_GB.UTF-8" cannot be honored
在我的电脑一切正常。 执行此任务的方式是否更好(并且与已安装的R本地化无关)?通常我想使用strptime,因为它允许非常灵活的解析日期时间字符串。
我很确定你的大学计算机上没有安装“en_GB.UTF-8”语言环境。最简单的方法可能是安装它:)好吧,这对每个操作系统都不是微不足道的。
其他选项可以使用可在每台计算机上找到的标准区域设置。由于您添加的示例没有显示特殊格式,因此您可以尝试将LC_TIME
设置为C
,这也适用于Linux和Windows。用那个语言环境,你给出的例子将像魅力一样工作。请参阅:
> Sys.setlocale("LC_TIME", "C")
> strptime("Mon, 14 Mar 2011 23:42:16 GMT", format = "%a, %d %b %Y %H:%M:%S", tz="GMT")
[1] "2011-03-14 23:42:16 GMT"
或者否则你应该改变你的数据 - 例如为:写一个简短的功能替代所有week-和几个月的名字标准字符串和重组导入的字符串标准的。
我试过你的代码在我的Windows机器上,并得到相同的错误。作为参考,Sys.getlocale的结果(“LC_TIME”):
> Sys.getlocale("LC_TIME")
[1] "English_United Kingdom.1252"
我怀疑这可能是一个相当标准的语言环境。
但我也怀疑解决此问题的更好方法是使用软件包lubridate中的某些功能,这使得使用日期很容易。
在你的问题中,你没有给出足够的细节,但是我猜测“sometext”采用了特定的预期格式,例如DMY或YMD。 Lubridate提供了以任何指定格式解析日期的函数,例如dmy(),ymd(),mdy() - 你得到的图片。
如果您提供有关您真实问题的更多详细信息,我们可能会提供更具体的帮助。
对不起,我使用sometext和timeformat的示例编辑了我的问题。我会看看润滑,谢谢你的提示! – user625626 2011-03-17 22:31:28
不幸的是,lubricate在其parse_date函数中也使用了strptime - 所以在这方面没有任何帮助:-( – user625626 2011-03-17 23:01:43
我已经用sometext和timeformat的例子编辑了这个问题。因为语言环境的安装不是真的依赖于操作系统,因此其他一些选项会很好... – user625626 2011-03-17 22:29:50
@ user625626:感谢您的更新,并将我的注意力指向了那里。我修改了我的答案,并希望这可以帮助。 – daroczig 2011-03-17 23:11:23
jep - 它适用于linux和windows - 非常感谢你! – user625626 2011-03-17 23:27:58