格式化时间戳

时间:2020-04-06 23:44:14

标签: r

我正在尝试以24小时格式更正和重新格式化时间戳,但是它们缺少足够的数字以正确使用POSIXct函数。

这里是日期和时间戳的示例。在数据框中,它们是“年份”(例如:2018),“一年中的一天”(例如:305)和“时间”(例如:0)的列。

“时间”列给我一些问题。值看起来像(0、30、100、130、200)。在这种情况下,如果格式化为%H:%M:%S格式,则0应该为00:00:00。我的问题是我需要弄清楚如何格式化它。

这是我尝试的代码:

mt$date <- as.POSIXct(paste(mt$Year, mt$DOY, mt$Time), format = "%Y %j %H")

感谢您的帮助,我相信这很容易解决。

1 个答案:

答案 0 :(得分:0)

我们可以利用sprintf来创建format

mt$date <- with(mt, as.POSIXct(paste0(Year, '-', DOY,' ', 
 sub('^(..)', '\\1:', sprintf('%04d', Time))), format = "%Y-%j %H:%M"))
mt$date
#[1] "2018-11-01 00:00:00 EDT" "2018-11-08 00:30:00 EST" "2018-06-24 01:00:00 EDT"
#[4] "2018-08-13 01:30:00 EDT" "2018-11-16 10:00:00 EST"

数据

mt <- structure(list(Year = c(2018, 2018, 2018, 2018, 2018), DOY = c(305, 
312, 175, 225, 320), Time = c(0, 30, 100, 130, 1000)),
class = "data.frame", row.names = c(NA, 
-5L))