有没有一种方法可以格式化R中的POSIXct对象并在该调用中指定LC_TIME?
我有这个代码,它以德语格式返回对象
t <- Sys.time() fmt <- "%a, %d %b %Y %H:%M:%S GMT" format(t, fmt) #> [1] "Mi, 23 Mrz 2022 14:57:50 GMT" Sys.getlocale("LC_TIME") #> [1] "German_Germany.1252"
我想要的格式可以通过设置LC_TIME来实现,但这不是我想要的。相反,我希望在不更改R会话或区域设置选项的情况下找到一个解决方案。
Sys.setlocale("LC_TIME", "C") format(t, fmt) #> [1] "Wed, 23 Mar 2022 14:57:50 GMT" # correct output, but changing the locale :(
理想情况下,我想要 format(t, fmt, LC_TIME = "C") 或类似的,具有最小的外部依赖性,并且不更改任何其他内容。。。
format(t, fmt, LC_TIME = "C")
我找不到一个完美的解决方案,但有一个变通方法 local() ,取决于您的目的。 local() 让您在函数中定义变量,这样您的全局环境就不会受到干扰。
local()
fmt <- "%a, %d %b %Y %H:%M:%S GMT" local({ locale <- Sys.getlocale("LC_TIME") Sys.setlocale("LC_TIME", "C") final_date <- format(Sys.time(), fmt) Sys.setlocale("LC_TIME", locale) return(final_date)}) #> [1] "Wed, 25 May 2022 12:03:36 GMT"
不幸的是,系统区域设置已更改,因此您应该使用 Sys.setlocale("LC_TIME", locale) 在结束时将其转回。这种方法的优点是,您可以在变量(变量 locale 否则将被创建)。
Sys.setlocale("LC_TIME", locale)
locale