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

Sea*_*ner 13 ruby formatting date

我有这个代码,将日期字符串数组从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
Run Code Online (Sandbox Code Playgroud)

是否有更好的,可能内置的方式来使用Ruby进行这种转换?我正在学习Ruby,所以任何其他方法都会非常感激.

Sim*_*tti 20

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

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

  • 我将`.strftime()`链接到解析,但这是一个小的区别. (4认同)
  • 你需要'时间'吗? (3认同)

knu*_*nut 10

随着Date#strftime您可以格式化日期.Date.strptime允许您进行"反向"操作:从字符串构建日期.

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

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

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

用于解析日期字符串:

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

用于创建字符串:

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


Bre*_*der 5

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

Date.parse("17-Nov-2011").strftime('%m/%d/%y')
Run Code Online (Sandbox Code Playgroud)