在R中,有没有办法将中文时间字符从12小时设置正确转换为24小时设置?

时间:2017-09-24 05:27:02

标签: r lubridate

我使用lubridate进行转换。支持英文字符而不是中文字符是很好的。例如,

> library(lubridate)
> mdy_hm("01/31/2017 08:01 PM")
[1] "2017-01-31 20:01:00 UTC"
> mdy_hm("01/31/2017 08:01 AM")
[1] "2017-01-31 08:01:00 UTC"

很明显,将“AM”和“PM”条件分开。但是对于另一个例子,

> ymd_hm("2017年9月10日上午12:36")
[1] "2017-09-10 12:36:00 UTC"

无法将“AM”状态转换为“PM”状态。

Thx @ycw,它对我有用。在这里,我写了一个函数。

Tconv <- function(x){
  time = x
  y <- ifelse(grepl("日 上午", time), paste(time, "AM", sep = " "), 
              ifelse(grepl("日 下午", time), paste(time, "PM", sep = " "), 
                     time))
  z <- lubridate::ymd_hm(y)
  return(z)
}

> time <- data_frame(date = "2017年9月10日 上午12:36", "2017年9月10日 下午12:36")
> Tconv(time)
[1] "2017-09-10 00:36:00 UTC" "2017-09-10 12:36:00 UTC"

1 个答案:

答案 0 :(得分:1)

如果上午表示“AM”,则可以使用grepl检测此字符串是否存在,如果TRUE,则将“AM”添加到该字符串。

library(lubridate)

time <- c("2017年9月10日上午12:36")

time2 <- ifelse(grepl("上午", time), paste(time, "AM", sep = " "), time)
ymd_hm(time2)
[1] "2017-09-10 00:36:00 UTC"