有没有更简单的方法用Ruby将时间戳插入文件名?

时间:2013-01-24 18:18:00

标签: ruby

是否有更简单的方法在文件名中插入时间戳?

def time_stamped_file(file)
  file.gsub(/\./,"_" + Time.now.strftime("%m-%d_%H-%M-%S") + '.') 
end

f = "test.txt"
puts time_stamped_file(f) 


=> test_01-24_12-56-33.txt

4 个答案:

答案 0 :(得分:7)

不一定“更容易”,但这是一种更为规范和健全的方式:

def timestamp_filename(file)
  dir  = File.dirname(file)
  base = File.basename(file, ".*")
  time = Time.now.to_i  # or format however you like
  ext  = File.extname(file)
  File.join(dir, "#{base}_#{time}#{ext}")
end

timestamp_filename("test.txt")     # => "./test_1359052544.txt"
timestamp_filename("test")         # => "./test_1359052544"
timestamp_filename("dir/test.csv") # => "dir/test_1359052544.csv"

答案 1 :(得分:2)

如果您只是尝试创建一个唯一命名的文件而且它不必包含原始文件名,则可以使用内置的Tempfile类:

require 'tempfile'

file = Tempfile.new('test')
file.path
#=> "/var/folders/bz/j5rz8c2n379949sxn9gwn9gr0000gn/T/test20130124-72354-cwohwv"

答案 2 :(得分:1)

如果您想要更短的方法(并且不关心时间戳的准确性),您可以采用类似于Paperclip的方法,如下面的SO帖子所述。

Paperclip - How do they create the timestamp appended to the file name?

答案 3 :(得分:-1)

那呢?它对我有用。

time = Time.now
puts time.strftime("%m-%d-%Y.%H.%M.%S")