如何将‘X小时/天前’格式的时间转换为标准日期时间格式(含爬虫新闻时间处理及系统时间疑问)
解决相对时间转换与浏览器时间识别问题
嘿,我来帮你搞定这两个问题:
一、在R中将相对时间转换为标准日期时间格式
处理这类相对时间字符串,lubridate包是个非常顺手的工具,它专门用来简化日期时间的操作。步骤如下:
- 先安装并加载包(如果还没装的话):
install.packages("lubridate") library(lubridate)
- 转换你的时间向量:
time <- c("11 hours ago", "2 days ago", "3 days ago") # 转换为带时区的标准POSIXct格式(默认用本地时区) standard_datetime <- now() - parse_duration(time) # 如果只需要日期部分(不带具体时间),可以转成Date格式 standard_date <- as.Date(standard_datetime)
解释一下:parse_duration()会自动识别"X hours ago"、"X days ago"这类字符串,把它们转换成对应的时长对象;然后用当前时间(now())减去这个时长,就能得到对应的过去时间点。如果需要用UTC时间而非本地时区,只需把now()改成now(tzone = "UTC")就行。
二、浏览器是否会识别本地系统时间?
答案是肯定的。当网页上显示"11 hours ago"这类相对时间时,绝大多数情况下都是浏览器基于用户设备的**本地系统时间(包括时区)**来计算具体时间点的。
举个实际例子:
- 假设用户在东八区(北京时间),当前本地时间是2024-05-20 14:00,那么"11 hours ago"会被解析为2024-05-20 03:00;
- 同一时刻,另一个在西五区(纽约时间)的用户,本地时间是2024-05-19 23:00,"11 hours ago"就会被解析为2024-05-19 12:00。
当然也有例外:少数网站会在后端就把相对时间转换成UTC时间戳,再传递给前端显示,但这种情况比较少见,大部分动态显示的"X ago"都是前端基于本地时间计算的。
内容的提问来源于stack exchange,提问作者Marco




