Ruby strptime超过24小时

时间:2014-07-22 16:31:50

标签: ruby-on-rails ruby datetime strptime

我有一个以下格式的字符串:

"136:16:11.862504" 
(hours:minutes:seconds:milliseconds) 

每当我尝试使用Ruby的strptime来解析这个字符串时,它会抛出ArgumentError: invalid strptime format - '%H:%M:%S'

我实际上已经进行了相当广泛的搜索,并且无法找到一种优雅的方法来解析它(除了用字符串和句点分割字符串的相当笨重的解决方案,并且手动完成所有操作)。有没有办法做到这一点,我忽略了?

编辑:我不打算从中获取时间戳,我希望得到时间持续时间

2 个答案:

答案 0 :(得分:2)

您的预期产量是多少? '136'不是一个有效的小时,由于你没有日期部分,我们不能简单地将那些'额外'小时变成几天。如果您不关心日期部分,此解决方案可能适合您:

time = "136:16:11.862504"
hours, minutes, seconds = time.split(":").map(&:to_f)
hours %= 24
minutes %= 60
seconds %= 60

Time.new(0, 1, 1, hours, minutes, seconds, 0)
=> 0000-01-01 16:16:11 +0000 

答案 1 :(得分:0)

如果没有任何内容阻止您使用Regexp,则可以使用基于this答案的内容,例如:

/^(\d+):([0-5][0-9]):([0-5][0-9])\.\d+$/ =~ "136:16:11.862504"
puts "#{$1} : #{$2} : #{$3}"
136 : 16 : 11