Ruby-DateTime库解析错误(bug?)
有人能验证我的日期时间转换错误吗 我拥有的是从日期库生成的一周中的天数作为数字fixnum键的散列。我对散列进行了排序,并希望将fixnum键转换为一周中的几天(即0-->周日) 我的散列输出是Ruby-DateTime库解析错误(bug?),ruby,datetime,hash,Ruby,Datetime,Hash,有人能验证我的日期时间转换错误吗 我拥有的是从日期库生成的一周中的天数作为数字fixnum键的散列。我对散列进行了排序,并希望将fixnum键转换为一周中的几天(即0-->周日) 我的散列输出是{3=>7,2=>1,4=>2}(使用dh=hash[dh.sort]我将得到{2=>1,3=>7,4=>2}) 排序之后,我尝试执行一个。每个都执行 dh = {3=>7, 2=>1, 4=>2} dh=Hash[dh.sort] dh.each do |day,reg| #
{3=>7,2=>1,4=>2}
(使用dh=hash[dh.sort]
我将得到{2=>1,3=>7,4=>2}
)
排序之后,我尝试执行一个。每个都执行
dh = {3=>7, 2=>1, 4=>2}
dh=Hash[dh.sort]
dh.each do |day,reg|
#puts day.class
#puts day="3" # This works
day=day.to_s ##<<== problem here: error "invalid date" when evaluated by strptime
## if don't do day.to_s conversion, error "can't convert fixnum into string"
#day="#{day}" ## does not work either
wday= DateTime.strptime(day,'%d') ##<<== and problem here
puts wday.strftime("%a")
puts wday
end
dh={3=>7,2=>1,4=>2}
dh=散列[dh.sort]
dh.每做一天,注册|
#每天上课
#放置day=“3”#此操作有效
day=day.to#u##这项工作
=> dh = {3=>2, 2=>7}
=> {3=>2, 2=>7}
=> dh = Hash[dh.sort]
=> {2=>7, 3=>2}
=> dh.each { |day,reg| DateTime.strptime(day,'%d') }
=> TypeError: no implicit conversion of Fixnum into String
=> dh.each { |day,reg| puts DateTime.strptime(day.to_s,'%d') }
=> 2013-12-02T00:00:00+00:00
=> 2013-12-03T00:00:00+00:00
=> {2=>7, 3=>2}
编辑以反映所指出的正确原因
好的,我解决了问题
我最初使用的是
datestamp = DateTime.strptime(datestr, '%m/%d/%y %H:%M')
和datestamp.wday
创建一个散列,其中#wday值作为键。这些#wday值是0-6之间的数字,表示周日和周六
当我使用DateTime.strtime(day,'%d')
时,我应该使用%w开关。正确的语句应该是DateTime.strtime(day.to_s,'%w')
如果我理解正确,您会混淆正确的DateTime格式。如果您需要处理工作日编号,则需要输入%w
,而不是%d
,即每月的第几天
dh = {3=>7, 2=>1, 4=>2, 0=>5}.sort
dh.each do |day,reg|
day=day.to_s
wday= DateTime.strptime(day,'%w')
puts wday.strftime("%a")
end
# Sun
# Tue
# Wed
# Thu
你能把它简化为一行并给出预期输出和实际输出吗?仅仅说“它不起作用”是不起作用的。翻译会出错。“不能将FixNum转换成字符串……”或“无效日期”可以简化为一行吗?@ JAMEX,上面的代码工作正常,您可能需要添加解释器错误信息。关于“代码>日期时间”。StrpTimes(“3”,“%D”)< /代码>?谢谢,原始代码工作,但我发现了我认为是日期库的设计错误。strTime方法无法将“0”识别为一周中的有效日期(也称为星期日)。见我的解释。