0

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

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

4

3 回答 3

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

或者,如果您不想使用 Date 模块:

my_string = '10/20/2013'
p  my_string.split('/').rotate(2).join('-') #=> "2013-10-20"
于 2013-10-28T14:51:56.683 回答
1

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

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

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

于 2013-10-28T14:45:18.523 回答
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

以下是日期格式的格式选项:

  • %Y带世纪的年份(可以是负数,至少 4 位数字)-0001, 0000, 1995, 2009, 14292, 等。
    • %-Y未填充(1..2013等)
  • %C年 / 100(向下取整,例如202009 年)
  • %y年 % 100 ( 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)
  • %u星期几(星期一是 1,1.. 7
  • %w星期几(星期日是 0,0.. 6
  • %U一年中的周数。一周从星期日开始。( 00.. 53)
  • %W一年中的周数。一周从星期一开始。( 00.. 53)
于 2013-10-28T14:54:08.817 回答