我有2个时间对象,一个对象有更大的月份:
t = Time.new(2017, 8, 1)
n = Time.new(2017, 9, 1)
如何只用一个输入设置两个对象的月份?
我认为这样的事情会起作用:
month1 = gets #This works
month2 = month1 + 1
t = Time.new(2017, month1, 1) #This works too
n = Time.new(2017, month2, 1) #But this doesn't work
答案 0 :(得分:2)
> month1 = gets.to_i
> 5
> month2 = month1 + 1
> t = Time.new(2017, month1, 1)
#=> 2017-05-01 00:00:00 +0530
> n = Time.new(2017, month2, 1)
#=> 2017-06-01 00:00:00 +0530
注意:强>
month2 = month1 + 1
中的String
,您正在添加一个错误的整数值如果您使用rails,则可以使用 Time#change 内置方法,您可以使用以下任意一个键更改任何参数::year
,:month
时间对象的:day
,:hour
,:min
,:sec
,:usec :nsec
例如:
> Time.new(2017, 8, 1)
#=> 2017-08-01 00:00:00 +0530
> Time.new(2017, 8, 1).change(month: 7)
#=> 2017-07-01 00:00:00 +0530
答案 1 :(得分:2)
相反如此,因为你的问题明显忽略了对象的时间部分,你的解决方案将不得不处理值不在1到11之间的情况,否则将会出现错误的月份错误范围:
Date#>>
这使用Date
,它只返回一个新的d = Date.new(2017,11,1)
d >> 1
#=> #<Date: 2017-12-01 ((2458089j,0s,0n),+0s,2299161j)>
d >> 2
#=> #<Date: 2018-01-01 ((2458120j,0s,0n),+0s,2299161j)>
# It can accept negative numbers too
# Although this is usually represented as d << 10
d >> -10
#=> #<Date: 2017-01-01 ((2457755j,0s,0n),+0s,2299161j)>
d >> -10 == d << 10
#=> true
对象,增加n个月。例如
div
答案 2 :(得分:-1)
我唯一需要做的就是将我读入的字符串转换为整数:
month1 = gets.to_i
然后我的代码运行得很好。