将字符串日期格式从“2011年11月17日”转换为“11/17/11”

时间:2011-11-17 17:53:55

标签: ruby date formatting

我有这个代码将日期字符串数组从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,所以任何其他方法都会非常感激。

3 个答案:

答案 0 :(得分:20)

使用内置的Time.parseTime#strftime功能。

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

答案 1 :(得分:10)

使用Date#strftime,您可以设置日期格式。 Date.strptime允许您进行“反向”操作:从字符串构建日期。

当你将两者结合起来时,你会得到你的结果:

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

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

用于解析日期字符串:

  • %d:当天的数量(17)
  • %b:带三个字母的月份(11月)
  • %Y:年份有4位数(2011年)

用于创建字符串:

  • %m:月(11)
  • %d:当天的数量(17)
  • %y:年份有2位数(11)

答案 2 :(得分:4)

Ruby拥有非常强大的日期和时间函数集,请查看Date类。

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