如何从日期字符变量中删除时间字段字符串?

Posted

技术标签:

【中文标题】如何从日期字符变量中删除时间字段字符串?【英文标题】:How to remove time-field string from a date-as-character variable? 【发布时间】:2014-05-30 04:07:52 【问题描述】:

假设我有一个像这样的变量

c<-c("9/21/2011 0:00:00",  "9/25/2011 0:00:00",  "10/2/2011 0:00:00",  
"9/28/2011 0:00:00",  "9/27/2011 0:00:00")

什么是删除所有0:00:00s 的快速方法,以便

c
[1] "9/21/2011" "9/25/2011" "10/2/2011" "9/28/2011" "9/27/2011"

【问题讨论】:

使用gsub 函数。 SO档案中一定有很多很多工作的例子。 您可以在这里使用示例给出答案吗? +1 这可能有效sapply(strsplit(x, "\\s+"), "[", 1),但您可能希望实际使用此数据作为日期 (as.Date)。 我认为这个问题并没有要求全面性,只是如何从日期作为字符的变量中删除时间字段字符串? 【参考方案1】:

您可以将它们转换为日期,然后根据需要进行格式化,例如:

v <- c("9/21/2011 0:00:00",  "9/25/2011 0:00:00",  "10/2/2011 0:00:00",  
     "9/28/2011 0:00:00",  "9/27/2011 0:00:00")
v <- format(as.POSIXct(v,format='%m/%d/%Y %H:%M:%S'),format='%m/%d/%Y')
> v
[1] "09/21/2011" "09/25/2011" "10/02/2011" "09/28/2011" "09/27/2011"

或者,您可以简单地使用 gsub 删除 " 0:00:00" 子字符串:

v <- gsub(x=v,pattern=" 0:00:00",replacement="",fixed=T)
> v
[1] "9/21/2011" "9/25/2011" "10/2/2011" "9/28/2011" "9/27/2011"

【讨论】:

更简单的方法是在日期类型上使用 Round 和 unit="day" 将round_date 用于lubridate 中的日期时间对象 @cengel:好吧,OP 的示例不是在谈论日期,而是在谈论包含日期的字符串,所以我宁愿避免加载外部包只是为了从字符串中删除一些后缀。 ..【参考方案2】:

从 lubridate 包中:使用mdy_hms() 读取字符为月、日、年和小时、分钟、秒,然后用as.Date() 换行以剥离时间。

library(lubridate)
v <- c("9/21/2011 0:00:00",  "9/25/2011 0:00:00",  "10/2/2011 0:00:00",  
       "9/28/2011 0:00:00",  "9/27/2011 0:00:00")
v <- as.Date(mdy_hms(v))
v
# [1] "2011-09-21" "2011-09-25" "2011-10-02" "2011-09-28" "2011-09-27"

如果要将向量保持为字符类型,而不是日期类型:

v <- as.character(as.Date(mdy_hms(v)))

【讨论】:

以上是关于如何从日期字符变量中删除时间字段字符串?的主要内容,如果未能解决你的问题,请参考以下文章

java - 如何从Java中存储日期的给定字符串字段中减去X天? [复制]

如何将csv日期时间字符串保存到Django模型字段中[重复]

从firestore查询数据时,如何将保存的字符串格式的日期与当前日期进行比较?

abap编程,字符如何分割?

convert函数如何将数据库中日期转化成字符串呀

如何验证“日期和时间”字符串是否只有时间?