将字符串日期格式从“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,所以任何其他方法都会非常感激。

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

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

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

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

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

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

用于解析日期字符串:

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

用于创建字符串:

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

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

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