請參閱下面的代碼,我必須更改我的區域設置才能夠轉換日期。我的第一次嘗試不成功,我的第二次嘗試工作,雖然它似乎是多餘的,並沒有改變Sys.getlocale
的輸出。Sys.setlocale意外的行爲
我的操作系統是Windows 7 64位
Sys.getlocale() # "LC_COLLATE=French_Belgium.1252;LC_CTYPE=French_Belgium.1252;LC_MONETARY=French_Belgium.1252;LC_NUMERIC=C;LC_TIME=French_Belgium.1252"
date <- "Dec-11"
as.Date(date, format = "%b-%d") # NA
Sys.setlocale(locale = "UK") # "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252"
locale2 <- Sys.getlocale()
as.Date(date, format = "%b-%d") # NA
Sys.setlocale("LC_TIME", "English_United Kingdom")
locale3 <- Sys.getlocale() # "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252"
as.Date(date, format = "%b-%d") # "2017-12-11"
locale2 == locale3 # TRUE
我可以跳過第一次調用Sys.getlocale
和日期轉換將工作:
Sys.getlocale() # "LC_COLLATE=French_Belgium.1252;LC_CTYPE=French_Belgium.1252;LC_MONETARY=French_Belgium.1252;LC_NUMERIC=C;LC_TIME=French_Belgium.1252"
date <- "Dec-11"
as.Date(date, format = "%b-%d") # NA
Sys.setlocale("LC_TIME", "English_United Kingdom") #
locale4 <- Sys.getlocale() # "LC_COLLATE=French_Belgium.1252;LC_CTYPE=French_Belgium.1252;LC_MONETARY=French_Belgium.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252"
as.Date(date, format = "%b-%d") # "2017-12-11"
但是,這並不工作:
Sys.getlocale() # "LC_COLLATE=French_Belgium.1252;LC_CTYPE=French_Belgium.1252;LC_MONETARY=French_Belgium.1252;LC_NUMERIC=C;LC_TIME=French_Belgium.1252"
date <- "Dec-11"
as.Date(date, format = "%b-%d") # NA
Sys.setlocale(locale = "English_United Kingdom") #
locale5 <- Sys.getlocale() # "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252"
as.Date(date, format = "%b-%d") # NA
這與此問題有關:Converting integer format date to double format of date
加入您的操作系統信息,它太,這是在有關區域設置和日期格式的所有問題的關鍵。此外,如果您執行'Sys.setlocale(locale =「English_United Kingdom」)'而不是'Sys.setlocale(locale =「UK」),會發生什麼? –
請參閱更新的答案 –
我也做了一些更多的測試,除非我錯過了一些東西,這看起來像一個錯誤。唯一要弄清楚的是該錯誤實際存在的地方。它可能是R,但這也可能是Windows。我會在今晚進一步檢查另一個系統,並保持更新。我也發佈在R-devel上,希望有些R大師可以在此發光:http://r.789695.n4.nabble.com/LC-TIME-not-set-correctly-by- Sys-setlocale-td4740135.html –