代码之家  ›  专栏  ›  技术社区  ›  David

格式化指定LC_time的时间对象而不更改区域设置

  •  0
  • David  · 技术社区  · 4 年前

    有没有一种方法可以格式化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") 或类似的,具有最小的外部依赖性,并且不更改任何其他内容。。。

    0 回复  |  直到 4 年前
        1
  •  1
  •   Rodrigo Lustosa    4 年前

    我找不到一个完美的解决方案,但有一个变通方法 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 否则将被创建)。

    推荐文章