ruby - 初始化 `Time`的子类

标签 ruby time

我想创建 Time 的子类,比如说 MyTime,这样我就可以定义(尤其是与格式相关的)方法,而不会污染 Time 类。

class MyTime < Time; end

对于 Time 上定义的一些构造函数方法,我可以在 MyTime 中使用它们,如下所示:

MyTime.now

但有时我需要基于 Time 实例创建 MyTime 实例。例如,我想要一个基于以下内容的 MyTime 实例:

File.mtime(path_to_some_file)

这是一个 Time 实例。构造函数 Time#new 不接受 Time 实例,因此我无法使用它。我该怎么做?

最佳答案

Time 类有一个 at使用 Time 实例作为参数的类方法:

at(time) → time
[...]

Creates a new time object with the value given by time, [...]

所以你可以这样说:

>> class MyTime < Time; end
>> mt = MyTime.at(File.mtime(path_to_some_file))
>> mt.class
=> MyTime

因此,将 Time 转换为 MyTime 只需调用 MyTime.at

关于ruby - 初始化 `Time`的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14743760/

相关文章:

ruby - 如何更改作为散列值的变量的值(使用散列)?

ruby-on-rails - 'ActionView::Template::Error - 没有路由匹配'为 "old style"语句传递 'link_to' 参数

ruby - rspec 它在循环内阻塞

ruby - 不同 ruby​​ 版本的不同指数行为

go - time.After 在指定时间后没有被触发

python - 几个vim标签插件的区别

c - 如何获取当前日期和时间并将其以正确的格式保存到 char* 数组中?

c++ - 时区之间的时间转换

time - std::time::Duration 是否与 "time" crate 中的 time::precise_time_ns 一样精确?

c# - 我有开始时间、结束时间和持续时间..我想在开始时间中添加持续时间,直到在 C# 中实现结束时间?