我有一个Ruby命令行工具,可以使用--duration
选项接受一些秒,例如--duration 300
。我想扩展此选项以接受简单的时间字符串,如:
--duration 30s
- >三十秒--duration 45m
- >四十五分钟 - > 2700秒--duration 5h
- >五个小时 - > 18000秒--duration 2d
- >两天 - > 172800秒--duration 3M
- >三个月 - >九十天 - > 7776000秒秒(s
),分钟(m
),小时(h
),天(d
),月(M
)是唯一的我计划接受的投入。接受2d6h
等格式不是必需的。
秒不是时间对象或工具中的任何内容,它是在POST请求中发送的整数,如?duration=18000
。
答案 0 :(得分:4)
虽然可能有一个时间库可以做得更好,但这应该可以解决问题:
time_multipliers = {
's' => 1,
'm' => 60,
'h' => 60 * 60,
'd' => 60 * 60 * 24,
'M' => 60 * 60 * 24 * 30
}
duration = '30m' #whatever
duration, unit = duration.match(/(\d+)([smhdM])/).captures
duration_in_secs = duration.to_i * time_multipliers[unit]
值得一提的是:几个月很奇怪。一个月不是30天,所以你要么不想提供这个令人困惑的选项,要么真的明确表示你并不是真的意味着月,而你真的只是意味着30天。