如何减少日期时间并仅保留时间部分

时间:2019-04-15 08:29:07

标签: r

我有如下数据:

2018-04-01 00:12:45.823 
2018-04-01 00:12:49.897 
2018-04-01 00:12:56.207

如何切割它们仍然存在:

00:12:45.823
00:12:49.897
00:12:56.207

4 个答案:

答案 0 :(得分:6)

我们还可以使用并转换回时间:

mytime<-"2018-04-01 00:12:45.823"
strsplit(mytime," ")[[1]][2]
#[1] "00:12:45.823"

好吧,用read.table读取数据会“很好”地将其分解:

mytime<-read.table(text="2018-04-01 00:12:45.823 
2018-04-01 00:12:49.897 
                   2018-04-01 00:12:56.207",header=F)
      V1           V2
1 2018-04-01 00:12:45.823
2 2018-04-01 00:12:49.897
3 2018-04-01 00:12:56.207

答案 1 :(得分:4)

我们可以使用sub来匹配字符,直到一个或多个空格(\\s+)并替换为空白(""

sub("^[^ ]+\\s+", "", df1$col)
#[1] "00:12:45.823" "00:12:49.897" "00:12:56.207"

或者先转换为POSIXct,然后转换为format(此处小数位数的精度可能会略有变化)

format(as.POSIXct(df1$col), "%H:%M:%OS3")
#[1] "00:12:45.822" "00:12:49.897" "00:12:56.207"

或者使用separate中的tidyverse

library(tidyverse)
df1 %>% 
   separate(col, into = c('col1', 'col2'), sep=" ") %>% 
   select(col2)

数据

str1 <- c("2018-04-01 00:12:45.823", "2018-04-01 00:12:49.897", 
           "2018-04-01 00:12:56.207")
df1 <- data.frame(col = str1, stringsAsFactors = FALSE)

答案 2 :(得分:2)

library(rebus)
library(stringr)
datetimes <- c('2018-04-01 00:12:45.823', 
'2018-04-01 00:12:49.897', 
'2018-04-01 00:12:56.207')
dgt2 <- DGT %R% DGT
str_extract(datetimes, dgt2 %R% ':' %R% dgt2 %R% ':' %R% dgt2 %R% DOT %R% dgt2 %R% DGT)

可能更具可读性。 dgt2是2位数字,使表达式更短。

[1] "00:12:45.823" "00:12:49.897" "00:12:56.207"

相同的结果给出了这一点:

str_extract(datetimes, digit(2,2) %R% ':' %R% digit(2,2) %R% ':' %R% digit(2,2) %R% DOT %R% digit(3,3))

答案 3 :(得分:0)

字符串a = DateTime.UtcNow.ToLongTimeString(); 将DateTime.UtcNow替换为dateTime并轻松获取时间字符串。