感谢下面的评论,我意识到我应该"%b"
使用"FEB"
(原来我使用"%m"
;感谢您对?strptime
的引用。但我的问题仍然存在。
当我这样做时
as.Date("13-FEB-15", "%d-%b-%y")
# [1] NA
我知道这会奏效:
as.Date("13-02-2015", "%d-%m-%Y")
# [1] "2015-02-13"
但是有没有办法避免将FEB
转换为02
和15
转换为2015
以获得我的预期结果?谢谢!
答案 0 :(得分:2)
一般且有用的诊断
试试这个,你会得到什么?
format(strptime(Sys.Date(), format="%Y-%m-%d"), "%y-%b-%d")
我得到了
[1] "16- 7月-22"
哈哈,中间人是中国人。出了什么问题?没有错。问题是%b
对您当前的区域设置很敏感。当您阅读?strptime
时,请特别注意哪种格式对您当前的区域设置敏感。
我的语言环境是:
Sys.getlocale("LC_TIME")
#[1] "zh_CN.UTF-8"
是的,那是在中国地区。
语言环境在日期时间格式上有所不同。在我的机器上:
as.Date("16-JUL-22", "%y-%b-%d")
# NA
as.Date("16- 7月-22", "%y-%b-%d")
#[1] "2016-07-22"
现在让我们重置时间区域:
Sys.setlocale("LC_TIME", "C")
as.Date("16-JUL-22", "%y-%b-%d")
#[1] "2016-07-22"
哇,它有效!请阅读?locales
了解更多信息,您将了解locale = "C"
的含义。
为您解决方案
Sys.setlocale("LC_TIME", "C")
as.Date("13-FEB-15", format = "%d-%b-%y")
答案 1 :(得分:1)
使用lubridate:
library(lubridate)
date1 = "2014-12-11 00:00:00"
date2 = "14-DEC-11"
ymd_hms(date1) == ymd(date2,tz = "UTC")
这些彼此相等,应该能够加入。