R语言中将含时分秒的日期时间转换为仅保留年月日格式的方法
R中日期时间值截断保留年月日的实现方案
针对datetime变量取值为2020-05-30 20:12:23这类格式、需要移除时间部分仅保留年月日的需求,按变量实际类型选对应方法即可:
方法1:用as.Date()做标准类型转换(推荐,返回正式Date类型)
之前调用as.Date()没得到预期结果,基本是没指定匹配的输入格式、或是时区参数不匹配导致的,按下面写法传参即可:
# 构造示例变量 datetime <- "2020-05-30 20:12:23" # 转换为Date类型,返回值为2020-05-30 date_result <- as.Date( datetime, format = "%Y-%m-%d %H:%M:%S", # 严格匹配输入的 年-月-日 时:分:秒 格式 tz = "Asia/Shanghai" # 按需指定时区,避免时差导致日期偏移1天 ) # 如果需要输出为字符型的"2020-05-30",再加一层格式化即可 date_str <- format(date_result, "%Y-%m-%d")
如果你的datetime本身已经是POSIXct/POSIXlt类型的时间对象,不需要额外指定format参数,直接调用as.Date(datetime, tz = "对应时区")就能得到结果。
方法2:字符串快速截断(适合固定格式输入,不需要Date类型的场景)
如果所有输入都是固定的YYYY-MM-DD HH:MM:SS长度格式,直接截取前10位即可,不需要做时间类型解析,不会出现格式、时区匹配错误:
date_str <- substr(datetime, 1, 10)
常见踩坑说明
- 不指定
format参数时,as.Date()会按系统默认的日期格式尝试解析,遇到空格分隔的时间部分很容易解析失败返回NA - 跨时区场景下如果不指定
tz参数,可能会因为UTC时间和本地时间的时差,把临近0点的时间算到前/后一天,按需传入对应时区即可解决
内容的提问来源于stack exchange,提问作者user17582908
相关产品推荐
相关产品推荐

