Convert HH:MM:SS AM/PM string to time

最后都变了- 提交于 2020-07-18 09:36:33

问题


I need to parse times in a character format like "1:36:22 PM".

I've tried various permutations of as.POSIXct and strptime but just can't get there. For example, this fails to pick up the importance of PM:

t <- "1:36:22 PM"
as.POSIXct(t, format = "%H:%M:%S")
# [1] "2016-09-08 01:36:22 BST"

and this fails:

strptime(t, "%H:%M:%S")
# [1] NA

Curiously, for reasons I can't understand, dropping the seconds from the input may work:

t <- "1:30:00 PM"
strptime(t, "%I:%M %p")
# [1] NA
 
t <- "1:30 PM"
strptime(t, "%I:%M %p")
# [1] "2016-09-08 13:30:00 BST"

All I want is for this to work:

t <- "1:30:00 PM"
SOME COMMAND HERE HERE
# [1] "13:30:00"

Any ideas?


回答1:


Have you tried using the lubridate package? It can handle AM/PM using the %p indicator in the "parse_date_time" function.

library(lubridate)
t <- "1:36:22 PM"
parse_date_time(t, '%I:%M:%S %p')
[1] "2016-09-08 13:36:22 UTC"

From the lubridate documentation:

%I: Hours as decimal number (01–12 or 1–12).

%M: Minute as decimal number (00–59 or 0–59).

%S: Second as decimal number (00–61 or 0–61).

%P: AM/PM indicator in the locale. Used in conjunction with I and not with H. An empty string in some locales.




回答2:


Use the conversion specifications %I and %p. See Details section in ?strptime:

%I Hours as decimal number (01–12).>

%p AM/PM indicator in the locale. Used in conjunction with %I and not with %H.

strptime(t, "%I:%M:%S %p")


来源:https://stackoverflow.com/questions/39399846/convert-hhmmss-am-pm-string-to-time

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!