Ruby - 如何在Date.strptime中使用数组

时间:2018-03-30 19:05:17

标签: ruby-on-rails ruby

如果我尝试将单个String转换为日期,则可以正常工作。

    require 'date'

    a=String.new
    a='20171023'
    puts b=Date.strptime(a,'%Y%m%d')
    puts b.yday()

如何使其与数组一起使用?我试过这种方式。

    require 'date'

    a=[20160106, 20132018, 20011221]
    b=a.each{|a| Date.strptime(a, '%Y%m%d').yday()}
    puts b

2 个答案:

答案 0 :(得分:3)

您需要传递一个字符串,而不是现在正在执行的整数:

a = ['20160106', '20130218', '20011221']

如果您想将每个操作的结果存储在b中,那么您可以使用map代替每个:

b = a.map { |date| Date.strptime(date, '%Y%m%d') }

您的第二个日期无效,我猜是20130218

require 'date'

a = %w[20160106 20130218 20011221]
b = a.map { |date| Date.strptime(date, '%Y%m%d').yday }
p b # [6, 49, 355]

%w[ ... ]是一个字符串数组,您可以避免使用引号和逗号。

如果您不需要将参数传递给方法调用,则可以避免使用括号。

答案 1 :(得分:1)

require 'date'

a = [20160106, 20131018, 20011221]
a.map { |n| (Date.parse n.to_s).yday }

注意阵列与OP的不同,我认为由于第二个数字日期无效,我做了某种拼写错误。