如果我尝试将单个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
答案 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的不同,我认为由于第二个数字日期无效,我做了某种拼写错误。