我想在Ruby中获取当前时间的字符串:
"Time is " + Time.new.month + "/" + Time.new.day + "/" + Time.new.year
但它说“无法将Fixnum转换为字符串”。我该如何解决这个问题?
答案 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}”