在 R 中转换外语日期时间格式无法正常工作

4

我正在尝试使用parsedate包将几个不同的日期时间格式解析/转换为统一/均质格式,问题在于有些日期会用英语(我的机器语言)表示,而有些则会用西班牙语。让我举个例子:

我有两个向量:

#English dates
dates<-c("2016 jun 15 8:39 p.m","2016 apr 2 8:39 a.m","2016 dec 2 8:39 a.m")
#Spanish dates
fechas<-c("2016 junio 15 8:39 p.m","2016 abril 2 8:39 a.m","2016 diciembre 2 8:39 a.m")

我注意到函数parse_date()可以将向量dates正确转换为所需的输出格式,但在尝试解析带有西班牙日期的向量时,即使将本地时间更改为“西班牙语”,它也无效,如下所示:

#Parsing english dates
parsedate::parse_date(dates)

> parsedate::parse_date(dates)
[1] "2016-06-15 08:39:00 UTC" "2016-04-02 08:39:00 UTC" "2016-12-02 08:39:00 UTC"


#Parsing spanish dates
Sys.setlocale("LC_TIME", "Spanish")
parsedate::parse_date(fechas)

> Sys.setlocale("LC_TIME", "Spanish")
[1] "Spanish_Spain.1252"
> parsedate::parse_date(fechas)
[1] "2016-01-15 08:39:00 UTC" "2016-01-02 08:39:00 UTC" "2016-01-02 08:39:00 UTC"
西班牙语输出结果错误,因为它应该返回与英文日期中相同的输出结果。我已经尝试了几种正确更改我的机器本地时间为西班牙语的方法,但都没有成功。
如果您可以帮助我,我将非常感激。
1个回答

3

请查看此处https://github.com/tidyverse/lubridate/issues/781

Sys.setlocale("LC_TIME", "Spanish_Spain.1252")
format <- "%a@%A@%b@%B@%p@"
enc2utf8(unique(format(lubridate:::.date_template, format = format)))
str(lubridate:::.get_locale_regs("Spanish_Spain.1252"))

library(lubridate)

Sys.getlocale("LC_TIME")
[1] "Spanish_Spain.1252"

parse_date_time(fechas, 'ymd HM')

[1] "2016-06-15 08:39:00 UTC" "2016-04-02 08:39:00 UTC" "2016-12-02 08:39:00 UTC"

1
非常感谢!!!我可以问一下 ""%a@%A@%b@%B@%p@" 是什么意思吗?如果我想回到英文日期,它会影响吗?再次感谢您。 - R_Student
1
这段代码来自于Github上的问题页面。问题似乎是在Windows中不存在es_ES.utf8。这段代码是解决此问题的方法。您可以通过以下方式设置Sys.setlocale:在控制台中键入?Sys.setlocale。在底部的示例部分中有一些示例。总的来说,设置和获取本地化信息非常直观。例如,在将其设置为您所在位置之后,请尝试Sys.time()Sys.Date()x <- c(1,2) month.abb[x]。然后,您可以检查您的系统是否受到影响。通过这种方式,我回到了“德语”。 - TarJae
先生,我有一个评论。首先再次感谢您,但我遇到了一个问题。当月份的格式缩写为F.I时,而不是“Abril”为“abr”,或者不是“Diciembre”为“dic”时,该函数将只给出“NAs”。如果您能帮助我解决这个问题,我将非常感激。 - R_Student

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接