Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime Sys.setlocale:请求设置区域设置。。。无愧_Datetime_R_Encoding_Localization - Fatal编程技术网

Datetime Sys.setlocale:请求设置区域设置。。。无愧

Datetime Sys.setlocale:请求设置区域设置。。。无愧,datetime,r,encoding,localization,Datetime,R,Encoding,Localization,我在包的函数中使用了strtime(…)。我需要使用特定的本地设置解析字符串,并使用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

我在包的函数中使用了
strtime(…)
。我需要使用特定的本地设置解析字符串,并使用
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)
在我的电脑上一切正常。 是否有更好(且独立于已安装的R本地化)的方法来执行此任务?一般来说,我想使用strtime,因为它允许非常灵活的方式解析日期时间字符串。

我很确定“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"

或者,您应该转换数据,例如:编写一个短函数,将所有周和月的名称替换为标准字符串,并将导入的字符串重新构造为标准字符串。

我在Windows计算机上尝试了您的代码,但也遇到了相同的错误。作为参考,Sys.getlocale(“LC_TIME”)的结果如下:

我怀疑这可能是一个相当标准的区域设置

但我也怀疑解决这个问题的更好方法是使用包lubridate中的一些函数,这使得处理日期变得容易

在你的问题中,你没有给出足够的细节,你想做什么,但我猜“sometext”是一种特定的预期格式,比如DMY或YMD。Lubridate提供函数来解析任何指定格式的日期,例如dmy()、ymd()、mdy()-您可以了解情况


如果您能提供更多关于您实际问题的详细信息,我们可能会提供更具体的帮助。

我已经用sometext和timeformat的示例编辑了这个问题。由于locale的安装并不真正依赖于操作系统,所以其他一些选项会很好…@user625626:感谢您的更新,也感谢您提醒我注意这里。我修改了我的答案,也希望这能有所帮助。谢谢@daroczig——我花了几个小时试图解决这个问题,你让我用了一行字。对不起,我用一些文本和时间格式的示例编辑了我的问题。我来看看润滑油,谢谢你的提示!不幸的是,在其parse_date函数中也使用strtime-因此没有来自该方的帮助:-(
> 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"
> Sys.getlocale("LC_TIME")
[1] "English_United Kingdom.1252"