gpt4 book ai didi

ruby - 如何从 Ruby 中的人性化字符串中取消人性化?

转载 作者:太空宇宙 更新时间:2023-11-03 17:28:29 25 4
gpt4 key购买 nike

有没有一种方法可以按如下方式对持续时间字符串进行非人化处理以获取实际的 utc 时间戳?

例如:“1.hour.ago 25.minute.ago 1.second.ago”转换回 Fri, 18 Oct 2019 16:09:10 UTC +00:00

站点信息显示为“17h 21m 1s ago”需要将其转换为 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"

但是如何删除字符串部分并转换为方法日期时间?尝试日期时间解析无效。

最佳答案

假设 "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 进行动态调度,因此它更凌乱。

关于ruby - 如何从 Ruby 中的人性化字符串中取消人性化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58455963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com