2011-11-17 94 views
13

我有此代码可将日期字符串数组从2011年11月17日格式转换为11/17/11 :将字符串日期格式从“2011年11月17日”转换为“11/17/11”

def date_convert dates 
    months = { 'Jan' => 1, 'Feb' => 2, 'Mar' => 3, 'Apr' => 4, 
      'May' => 5, 'Jun' => 6, 'Jul' => 7, 'Aug' => 8, 
      'Sep' => 9, 'Oct' => 10, 'Nov' => 11, 'Dec' => 12 } 
    new_dates = [] 
    dates.each do |date| 
    date_split = date.split('-') 
    month = months[date_split[1]] 
    day = date_split[0] 
    year = date_split[2][-2, 2] 
    new_dates.push ("#{month}/#{day}/#{year}") 
    end 
    new_dates 
end 

是否有更好的,可能内置的方式来使用Ruby进行此转换?我正在学习Ruby,所以对此的任何其他方法将不胜感激。

+2

Ruby的['Date'](HTTP:// www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/index.html)和['Time'](http://www.ruby-doc.org/stdlib-1.9.3/libdoc /time/rdoc/index.html)库功能非常全面。两人都应该花时间去了解他们可以做什么;日期处理比时间更大的范围。 –

+1

对于'parse'失败或混淆的时候,您应该明确查看['DateTime.strptime'](http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html #method-c-strptime) – Phrogz

+0

note:empty array + each + push = map – tokland

回答

20

使用内置的Time.parseTime#strftime函数。

require 'time' 
time = Time.parse("17-Nov-2011") 
time.strftime("%m/%d/%y") 
# => "11/17/11" 
+4

我会''.strftime()'链接到解析,但这是一个小小的区别。 –

+0

使用Time.parse ...返回:未定义的方法'解析'的时间:类(NoMethodError)? –

+3

你是否需要'时间'? –

4

Ruby有一组相当健壮的日期和时间函数,请查看Date类。

Date.parse("17-Nov-2011").strftime('%m/%d/%y') 
9

With Date#strftime您可以格式化日期。 Date.strptime允许您执行“反向”操作:从字符串构建日期。

当你把两个,你会得到你的结果:

puts Date.strptime('17-Nov-2011', '%d-%b-%Y').strftime('%m/%d/%y') 

每个%α参数是日期字符串的一部分。 您需要:

为了解析日期字符串:

  • %d:一天数(17)
  • %B:月用三个字母(11月)
  • %Y:年用4位(2011)

为了产生字符串:

  • %米:月(11)
  • %d:一天的数目(17)
  • %Y:年用2位(11)
+0

我知道Ruby可以猜测如何解析日期字符串,但我不知道你可以告诉它格式,这正是我需要做的。谢谢! –

相关问题