我的开始日期为“ 2017-11-14 10:11:01 CET”,结束日期为“ 2017-11-15 01:15:59 CET”。我想在这些开始和结束时间戳之间分别创建500毫秒的时间戳。例如。我需要一个包含以下输出的数据框
timestamp
2017-11-14 10:11:01.000
2017-11-14 10:11:01.500
2017-11-14 10:11:02.000
2017-11-14 10:11:02.500
.
.
.
2017-11-15 01:15:59.000
不知何故,我使用以下代码设法获得了以毫秒为单位的开始和结束日期:
start.date <- strptime("2017-11-14 10:11:01 CET", "%Y-%m-%d %H:%M:%OS")
start.date <- format(start.date, "%Y-%m-%d %H:%M:%OS3")
Output: "2017-11-14 10:11:01.000"
类似地,我将结束日期定为2017-11-15 01:15:59.000
。我现在想使用序列函数来创建每个500毫秒的时间戳序列。我做了类似的事情
seq.POSIXt(as.POSIXct(start), as.POSIXct(end), units = "milliseconds", by = 500)
但是它创建了一系列的20秒。例如,
"2017-11-14 10:11:01 CET"
"2017-11-14 10:19:21 CET"
"2017-11-14 10:27:41 CET"
.
.
.
"2017-11-15 01:11:01 CET"
一旦能够获得本系列,我还想将其转换为UNIX时间戳。 有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
我不知道这是您要找的东西,但似乎可以正常工作
seq.POSIXt(as.POSIXct(start), as.POSIXct(end), units = "seconds", by = .5)
答案 1 :(得分:0)
当您使用函数as.integer时,它将去除数字的小数部分,在您的情况下为毫秒。
我建议您使用此替代方法以UNIX格式获取所需的数字。 为了获得所需的输出,您可以将函数的输出作为整数,然后在所需的末尾附加。 由于UNIX时间戳记的后三位只能等于000或500,因此您可以尝试:
k<-as.numeric(seq.POSIXt(as.POSIXct(start.date), as.POSIXct(stop.date), units = "seconds", by = .5))[1:4]
k1<-cbind(substr(as.character(k), 1, 10),c("000","500"))
as.numeric(paste0(k1[,1],k1[,2]))
[1] 1510650661000 1510650661500 1510650662000 1510650662500
请注意,我仅对向量的前4个元素执行此操作,但是逻辑保持不变。