使用ruby进行日期格式转换

时间:2013-10-28 14:43:32

标签: ruby

如何使用ruby将日期格式从MM / DD / YEAR更改为YEAR-MM-DD? 数据从文件中读取。

因为反弹的标准日期格式如2013-10-20。

3 个答案:

答案 0 :(得分:3)

require 'Date'
p Date.strptime('10/20/2013','%m/%d/%Y').strftime('%Y-%m-%d') #=> "2013-10-20"

或者如果您不想使用日期模块:

my_string = '10/20/2013'
p  my_string.split('/').rotate(2).join('-') #=> "2013-10-20"

答案 1 :(得分:1)

您可以使用strptime来解析日期。之后,您可以使用DateTime对象的成员日,月和年打印日期。

d = DateTime.strptime('28/10/2013', '%m/%d/%Y')
puts "{d.year}-#{d.month}-#{d.day}"

编辑:实际上,打印的更好选择是使用hirolau建议的strftime

答案 2 :(得分:0)

请注意,YYYY-MM-DD是日期的ISO 8601表示。因此,对于这种格式,您可以最简单地:

require 'date'
puts Date.strptime( '10/20/2013', '%m/%d/%Y' ).iso8601
Date.strptime( '10/20/2013', '%m/%d/%Y' ).to_s

更一般地说,您可以通过strftime指定格式字符串:

require 'date'
def convert_date( date_str, in_format='%m/%d/%Y', out_format='%Y-%m-%d' )
  Date.strptime(date_str,in_format).strftime(out_format)
end

puts convert_date('10/20/2013')
#=> 2013-10-20

以下是date formatting的格式选项:

  • %Y 包含世纪的年份(可以为负数,至少4位数)-000100001995,{{1} },2009
    • 14292未填充(%-Y .. 1等)
  • 2013 年/ 100(向下舍入,例如2009年%C
  • 20 年%100(%y .. 00
  • 99 一年中的几个月,零填充(%m .. 01
    • 12未填充(%-m .. 1
    • 12空白填充(%_m .. 1
  • 12 完整的月份名称(%B
    • January大写(%^B
  • JANUARY 缩写的月份名称(%b
    • Jan大写(%^b
  • JAN 相当于%h
  • %b 每月的某一天,零填充(%d .. 01
    • 31未填充(%-d .. 1
    • 31空白填充(%_d .. 1
    • 31空白填充(与%e相同)
  • %_d 一年中的某一天(%j .. 001
  • 366 完整的工作日名称(%A
    • Sunday大写(%^A
  • SUNDAY 缩写名称(%a
    • Sun大写(%^a
  • SUN 星期几(星期一为1,%u .. 1
  • 7 星期几(星期日为0,%w .. 0
  • 6 一年中的周数。这一周从星期日开始。 (%U .. 00
  • 53 一年中的周数。本周从星期一开始。 (%W .. 00