如何在不更改小时数的前提下调整POSIXct类型时间的日期值?
如何在R中仅调整POSIXct时间的日期为前一天并保留原时间?
我明白你的问题啦——你想把POSIXct类型的时间日期往前调一天,但又不想丢失原来的小时分钟信息,现在的方法要么丢失时间部分,要么把时间默认改成01:00:00,确实挺闹心的。
问题出在你原来的步骤里:当你用as.Date(time_booked)-1时,会把POSIXct对象转换成只有日期的Date类型,时间信息直接被丢弃了,之后再转回POSIXct自然会用默认的时间值(这和你的时区设置有关,BST时区下默认可能就是01:00:00)。
这里有两种简单的方法可以帮你只改日期、保留原时间:
方法一:基础R实现(无需额外包)
POSIXct类型本质是从1970-01-01开始计算的秒数,所以我们可以直接减去一天的秒数(86400秒):
# 先正确格式化时间(假设db$times是字符型) time <- as.POSIXct(db$times, format="%Y-%m-%d %H:%M:%S", tz="BST") # 直接减去一天的秒数 time <- time - 86400
或者用更直观的difftime函数:
time <- time - as.difftime(1, units = "days")
方法二:用lubridate包(更易读,推荐)
lubridate包专门处理时间日期,语法非常直观:
# 先安装并加载包(如果没装过的话) install.packages("lubridate") library(lubridate) # 格式化时间 time <- as.POSIXct(db$times, format="%Y-%m-%d %H:%M:%S", tz="BST") # 直接减去1天 time <- time - days(1)
用这两种方法处理后,你的时间会从"2018-04-16 19:00:00 BST"变成"2018-04-15 19:00:00 BST",完美保留原有的小时分钟信息~
内容的提问来源于stack exchange,提问作者JWick
相关产品推荐
相关产品推荐

