如何在行结束前将字符串拆分一些字符串?

时间:2014-05-03 16:12:39

标签: ruby

我想分割"12:30am""6:55pm"等字符串,并将am / pm与时间分开。有没有办法使用String#split来做到这一点?

或者,是否有更好的方法将该字符串转换为Time对象?

2 个答案:

答案 0 :(得分:2)

你不需要做任何特别的事情。您需要做的就是使用"time"库。

require "time"
Time.parse "12:30am"
# => 2014-05-04 00:30:00 +0900
Time.parse "6:55pm"
# => 2014-05-04 18:55:00 +0900

答案 1 :(得分:1)

您可以执行Time.parse("12:00am".gsub(/am|pm/i, ""))之类的操作来取消任何结局。 gsub将根据/am|pm/i正则表达式删除这些字符。管道是一个或者我和它使它不区分大小写。使用gsub或ruby中的任何正则表达式查看rubular以获取帮助。

至于更好的时间方法,我建议尝试gem chronic以获得更灵活,更富有表现力的时间方法。以下是其文档中的一些示例。

require 'chronic'

Time.now   #=> Sun Aug 27 23:18:25 PDT 2006

Chronic.parse('tomorrow')
  #=> Mon Aug 28 12:00:00 PDT 2006

Chronic.parse('monday', :context => :past)
  #=> Mon Aug 21 12:00:00 PDT 2006

Chronic.parse('this tuesday 5:00')
  #=> Tue Aug 29 17:00:00 PDT 2006

Chronic.parse('this tuesday 5:00', :ambiguous_time_range => :none)
  #=> Tue Aug 29 05:00:00 PDT 2006

Chronic.parse('may 27th', :now => Time.local(2000, 1, 1))
  #=> Sat May 27 12:00:00 PDT 2000

Chronic.parse('may 27th', :guess => false)
  #=> Sun May 27 00:00:00 PDT 2007..Mon May 28 00:00:00 PDT 2007

Chronic.parse('6/4/2012', :endian_precedence => :little)
  #=> Fri Apr 06 00:00:00 PDT 2012

Chronic.parse('INVALID DATE')
  #=> nil