ruby - 如何从Ruby中的人性化字符串中去人性化以前的时间?
问题描述
有没有办法按如下方式对持续时间字符串进行非人性化以获得实际的 utc 时间戳?
例如:“1.hour.ago 25.minute.ago 1.second.ago”转换回 Fri, 18 Oct 2019 16:09:10 UTC +00:00
站点信息显示为“17h 21m 1s 前”需要将其转换为 db datetime utc 我设法做到这一点:
"17h 21m 1s ago".gsub("h", '.hour.ago').gsub("m", '.minute.ago').gsub("s ago", '.second.ago')
# ==> "17.hour.ago 21.minute.ago 1.second.ago"
但是如何删除字符串部分并转换为方法 datetime?尝试日期时间解析不起作用。
解决方案
假设"17h 21m 1s ago"
格式是您正在使用的格式,那么您可以使用它Time#advance
来完成工作:
def when_was(string)
time = Time.now.utc
string.split(/\s+/).each do |part|
case (part)
when /\A(\d+)h\z/
time = time.advance(hours: -$1.to_i)
when /\A(\d+)m\z/
time = time.advance(minutes: -$1.to_i)
when /\A(\d+)s\z/
time = time.advance(seconds: -$1.to_i)
end
end
time
end
p when_was("17h 21m 1s ago")
# => 2019-10-18 01:31:36 UTC
您也可以这样做,Time.now.utc - 17.hours - 21.minutes - 1.second
但这涉及动态调度,send
因此更加混乱。
推荐阅读
- javascript - 通过字符串调用外部库函数
- excel - 使用 VBA 和 selenium 抓取时从部分 id 中获取全部价值
- google-analytics - 通过性能最高的 GTM 或 Gtag 部署 Optimize
- android - 游戏开发:如何为速度添加加速度?
- google-sheets - 知道单元格是否在任何公式中使用
- angular - 无法使用 -> [routerLink]=" '/profile/ ' + currentUser.id" 访问用户组件
- xml - 使用 XSLT 基于特定键值合并 XML 节点
- php - PHP 5.6.10 - preg_match():编译失败:偏移量 100 处的字符类范围无效
- dask - 将延迟对象列表转换为 Dask 数组
- python - Python在元组中查找键