我使用当前的日期和时间来生成一个唯一的文件夹名称。有没有可能发生冲突的情况?我不这么认为,因为精确到毫秒,没有两个日期是相同的(除非两个上传发生在同一毫秒--但这在我目前的场景中不太可能)。
(Time.now.to_f * 1000).to_i发布于 2014-01-03 00:24:45
您可能希望使用the tmpdir standard library中的Dir.mktmpdir。它将处理一个真正唯一且无冲突的目录名,并将系统时间和进程id考虑在内。
发布于 2014-01-03 00:33:05
确实如此,但过去一毫秒后的强制时间get至少相差1(在某些情况下相差2),只有当你将其乘以1000,然后得到一个整数时才会如此。
pp = (Time.now.to_f * 1000).to_i; sleep 0.001 ; ppp = (Time.now.to_f * 1000).to_i
# 1388680023598
# 1388680023599当你乘以10^6时,你会得到另一个结果:
pp = (Time.now.to_f * 1000000).to_i; sleep 0.001 ; ppp = (Time.now.to_f * 1000000).to_i
# 1388681046148709
# 1388681046149988此外,如果您希望获得唯一的名称,您可以使用的ruby版本的GUID。但是如果你需要创建唯一的临时文件夹,你应该使用ruby的方法来创建一个临时文件夹,正如前面的答案所指出的那样。
发布于 2014-01-03 04:38:46
我不这么认为,因为,精确到毫秒,没有两个日期是相同的
你假设当你从你的系统时钟中获得时间时,你已经有了毫秒的分辨率。即使你得到的是毫秒数,这并不意味着硬件的分辨率是1毫秒。
对于大多数现代计算机和操作系统,它更接近于10毫秒。如果你预计会有大量的调用,你当然可以读取接近几毫秒的时间,它们可能会得到相同的时间戳。
最好附加一个自动递增的整数,或者一些随机数或guid。如果你想要一些排序,你可以添加一个时间表和另一个数字。
此外,您应该记住,用户可以随时调整时钟,或者如果系统通过NTP同步,则时钟可能会自行更改。
https://stackoverflow.com/questions/20887032
复制相似问题