我想在 Ruby 中获取当前时间的字符串:
"Time is " + Time.new.month + "/" + Time.new.day + "/" + Time.new.year
但它说“无法将 Fixnum 转换为字符串”。我怎样才能解决这个问题?
我想在 Ruby 中获取当前时间的字符串:
"Time is " + Time.new.month + "/" + Time.new.day + "/" + Time.new.year
但它说“无法将 Fixnum 转换为字符串”。我怎样才能解决这个问题?
或者你可以使用正确的工具来完成这项工作:时间格式化。
Time.new.strftime "Time is %m/%d/%Y" # => "Time is 11/13/2012"
你可以使用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")
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
-style 插值:
now = Time.new
"Time is %d/%d/%d" % [ now.month, now.day, now.year ]
第二个使您可以更好地控制格式。例如%02d
将填充0
到两个地方。
正如 Sergio 指出的那样,这种格式有一个特殊用途的函数,这可能是一个更好的主意。也是目前Time.now
的传统方法,而用于创建任意时间。Time.new
只要有可能,最好使用字符串插值而不是串联。正如您在(线程)中清楚地看到的那样,使用字符串插值会自动to_s
为您调用。
使用字符串插值:
“时间是 #{Time.new.month}/#{Time.new.day}/#{Time.new.year}”