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

问题描述:

我用lubridate来做转换。支持英文字符,但不支持中文字符。例如,在R中,有没有办法将中文时间字符从12小时制转换为24小时制?

> 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" 

如果上午意味着“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" 
+0

Thx,它适用于我。 – Jiaxiang

+0

@Jiaxiang我很高兴它的作品。请接受我的帖子作为答案。 – www