Ruby 如何更改时间对象的月份?
我有两个时间对象,一个对象的月份更大:Ruby 如何更改时间对象的月份?,ruby,time,Ruby,Time,我有两个时间对象,一个对象的月份更大: 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 wo
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
我需要做的唯一一件事是将读入的字符串转换为整数:
month1 = gets.to_i
然后我的代码运行得很好
> 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
注意:
- 您只需要将用户的输入转换为整数
- 在代码
中,month1是month2=month1+1
,您正在添加一个整数值,这会给您带来一个错误String
在Rails中: 如果您使用的是rails,那么内置方法是可用的,您可以使用以下任意键更改任何参数:
: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和11之间的情况,否则将针对超出范围的月份引发错误,那么这又如何呢
require 'date'
loop do
puts "Enter the first month:"
@first_month = gets.to_i
if (1..12).include?(@first_month)
break
else
puts "Incorrect value a month must be between 1 and 12."
puts "Please Try Again."
end
end
t = Date.new(2017,@first_month,1)
n = t >> 1
这将使用Date#>
,它只返回一个新的Date
对象,该对象的增量为n个月。比如说
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
d=新日期(2017,11,1)
d>>1
#=> #
d>>2
#=> #
#它也可以接受负数
#虽然这通常表示为d>-10
#=> #
d>>-10==d真
如果这是您的代码,它应该在t=Time.new(2017,month1,1)之前崩溃。
提示:您不能在字符串中添加数字。不,它不能。将该代码放入一个文件并运行该文件。@Sergio Tulentsev但我不明白,我认为我没有使用Time.new创建字符串对象。哦,好吧,我知道我失败的地方。我读入了一个字符串,需要将其转换为整数。@Alassar:不,它在month2=month1+1
处完全失败。