Fixnum字符串转换

时间:2012-11-12 21:39:24

标签: ruby

我想在Ruby中获取当前时间的字符串:

"Time is " + Time.new.month + "/" + Time.new.day + "/" + Time.new.year

但它说“无法将Fixnum转换为字符串”。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

或者你可以使用正确的工具来完成工作:时间格式化。

Time.new.strftime "Time is %m/%d/%Y" # => "Time is 11/13/2012"

答案 1 :(得分:3)

您可以使用to_s

"Time is " + Time.new.month.to_s + "/" + Time.new.day.to_s + "/" + Time.new.year.to_s

但事件更好的是使用strftime

Time.new.strftime("Time is %-m/%e/%Y")

答案 2 :(得分:3)

Ruby只能将字符串添加到字符串中,因此需要进行转换。作为注释,以双引号字符串插值的元素将自动转换:

now = Time.new
"Time is #{now.month}/#{now.day}/#{now.year}"

也可以将它们从一个自动转换的数组中组合起来:

now = Time.new
"Time is " + [ now.month, now.day, now.year ].join('/')

您还可以使用sprintf - 样式插值:

now = Time.new
"Time is %d/%d/%d" % [ now.month, now.day, now.year ]

第二个可让您更好地控制格式。例如,%02d会将0填充到两个位置。

正如Sergio指出的那样,这种格式化有一个特殊用途的功能,这可能是一个更好的主意。此外,Time.now现在的传统方法,而Time.new则用于创建任意时间。

答案 3 :(得分:1)

尽可能优先选择字符串插值而不是连接。您可以清楚地看到(thread),使用字符串插值会自动为您调用to_s

使用字符串插值:

“时间是#{Time.new.month} /#{Time.new.day} /#{Time.new.year}”