将时间字符串转换为秒

时间:2015-11-20 18:06:06

标签: ruby time

我有一个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

1 个答案:

答案 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天。