如何将 12 小时时间戳(不是日期时间,仅时间)转换为 24 小时时间?

How to convert a 12 hour time stamp (NOT a datetime, time only) to 24 hour time?

我有一个包含 12 小时制时间的 字符 列,例如:2:59:00 PM,4:35:00 AM,6:00:00 PM等

如何使用 lubridate(或其他函数)将这些时间转换为 24 小时制?我尝试使用 HMS 函数,但它只是去掉了 AM/PM 而没有实际将时间转换为 24 小时制...

编辑: 我尝试了这个 post 的答案:

这是我的代码:lab_data[LAB_TM_test:=format(strptime(LAB_TM, "%I:%M %p"), format="%H :%M:%S")]

但这会导致我的专栏全部变成 NA,并给我这个警告:

”警告信息: 在 strptime(LAB_TM, "%I:%M %p") 中: 检测到 strptime() 用法并用 as.POSIXct() 包装。这是为了最大限度地减少分配 POSIXlt 列的机会,POSIXlt 列使用 40 多个字节来存储一个日期(而 POSIXct 为 8 个字节)。使用 as.POSIXct()(它将根据需要在内部调用 strptime())来避免此警告。"

EDIT2: 这是我的专栏的样子,它是一个字符专栏:

c("2:59:00 下午", "4:35:00 上午", "6:00:00 下午", "6:00:00 下午", "6:00:00 下午", “6:00:00 下午”,“6:00:00 下午”,“6:00:00 下午”,“5:35:00 上午”)

尝试

lab_data[,LAB_TM_test:=as.POSIXct(LAB_TM, format='%I:%M:%S %p')]

这是一个 base R 解决方案,使用 strptime 转换为 24 小时制,strftime 仅打印时间。

df$LAB_TM_new <- strftime(strptime(df$LAB_TM, format="%I:%M:%S %p"), format="%H:%M:%S")

df
      LAB_TM LAB_TM_new
1 2:59:00 PM   14:59:00
2 4:35:00 AM   04:35:00
3 6:00:00 PM   18:00:00
4 6:00:00 PM   18:00:00
5 6:00:00 PM   18:00:00
6 6:00:00 PM   18:00:00
7 6:00:00 PM   18:00:00
8 6:00:00 PM   18:00:00
9 5:35:00 AM   05:35:00