Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么TimeWithZone对象的行为会有所不同,这取决于它是如何创建的,特别是在“.offset”方面? >DateTime.now.in_time_zone.class =>ActiveSupport::TimeWithZone >>时区,现在,班级 =>ActiveSupport::TimeWithZone >>DateTime.now.in_time_zone.offset => (0/1) >>Time.zone.now.offset 命名错误:2017年8月28日星期一17:34:46 CEST+02:00:Time的未定义方法“偏移量” from/Users/Magne/.rvm/gems/ruby-2.3.1/gems/activesupport-4.1.16/lib/active\u support/time\u with_zone.rb:364:in'method\u missing' 发信人(irb):287 来自/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/console.rb:90:in'start' 来自/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/console.rb:9:in'start' from/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/commands\u tasks.rb:69:在“控制台”中 from/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/commands\u tasks.rb:40:in“run\u command!” 来自/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands.rb:17:in`' 从箱子/轨道:4:in“require” 从箱子/轨道:4:in`'_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 为什么TimeWithZone对象的行为会有所不同,这取决于它是如何创建的,特别是在“.offset”方面? >DateTime.now.in_time_zone.class =>ActiveSupport::TimeWithZone >>时区,现在,班级 =>ActiveSupport::TimeWithZone >>DateTime.now.in_time_zone.offset => (0/1) >>Time.zone.now.offset 命名错误:2017年8月28日星期一17:34:46 CEST+02:00:Time的未定义方法“偏移量” from/Users/Magne/.rvm/gems/ruby-2.3.1/gems/activesupport-4.1.16/lib/active\u support/time\u with_zone.rb:364:in'method\u missing' 发信人(irb):287 来自/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/console.rb:90:in'start' 来自/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/console.rb:9:in'start' from/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/commands\u tasks.rb:69:在“控制台”中 from/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/commands\u tasks.rb:40:in“run\u command!” 来自/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands.rb:17:in`' 从箱子/轨道:4:in“require” 从箱子/轨道:4:in`'

Ruby on rails 为什么TimeWithZone对象的行为会有所不同,这取决于它是如何创建的,特别是在“.offset”方面? >DateTime.now.in_time_zone.class =>ActiveSupport::TimeWithZone >>时区,现在,班级 =>ActiveSupport::TimeWithZone >>DateTime.now.in_time_zone.offset => (0/1) >>Time.zone.now.offset 命名错误:2017年8月28日星期一17:34:46 CEST+02:00:Time的未定义方法“偏移量” from/Users/Magne/.rvm/gems/ruby-2.3.1/gems/activesupport-4.1.16/lib/active\u support/time\u with_zone.rb:364:in'method\u missing' 发信人(irb):287 来自/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/console.rb:90:in'start' 来自/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/console.rb:9:in'start' from/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/commands\u tasks.rb:69:在“控制台”中 from/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/commands\u tasks.rb:40:in“run\u command!” 来自/Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands.rb:17:in`' 从箱子/轨道:4:in“require” 从箱子/轨道:4:in`',ruby-on-rails,ruby,Ruby On Rails,Ruby,ActiveSupport::TimeWithZone没有偏移量方法。相反,呼叫由以下人员处理: 将缺少的方法发送到time实例,并用现有的时区将结果包装成新的TimeWithZone 它适用于日期时间,因为它响应偏移量: >> DateTime.now.in_time_zone.class => ActiveSupport::TimeWithZone >> Time.zone.now.class => ActiveSupport::TimeWithZone

ActiveSupport::TimeWithZone
没有偏移量
方法。相反,呼叫由以下人员处理:

将缺少的方法发送到
time
实例,并用现有的
时区
将结果包装成新的TimeWithZone

它适用于
日期时间
,因为它响应
偏移量

>> DateTime.now.in_time_zone.class
=> ActiveSupport::TimeWithZone
>> Time.zone.now.class
=> ActiveSupport::TimeWithZone
>> DateTime.now.in_time_zone.offset
=> (0/1)
>> Time.zone.now.offset
NoMethodError: undefined method `offset' for Mon, 28 Aug 2017 17:34:46 CEST +02:00:Time
    from /Users/Magne/.rvm/gems/ruby-2.3.1/gems/activesupport-4.1.16/lib/active_support/time_with_zone.rb:364:in `method_missing'
    from (irb):287
    from /Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/console.rb:90:in `start'
    from /Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/console.rb:9:in `start'
    from /Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/commands_tasks.rb:69:in `console'
    from /Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
    from /Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands.rb:17:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'
并在
时间内失败,因为它没有:

DateTime.instance_methods.include? :offset
#=> true

ActiveSupport::TimeWithZone
没有
offset
方法。相反,呼叫由以下人员处理:

将缺少的方法发送到
time
实例,并用现有的
时区
将结果包装成新的TimeWithZone

它适用于
日期时间
,因为它响应
偏移量

>> DateTime.now.in_time_zone.class
=> ActiveSupport::TimeWithZone
>> Time.zone.now.class
=> ActiveSupport::TimeWithZone
>> DateTime.now.in_time_zone.offset
=> (0/1)
>> Time.zone.now.offset
NoMethodError: undefined method `offset' for Mon, 28 Aug 2017 17:34:46 CEST +02:00:Time
    from /Users/Magne/.rvm/gems/ruby-2.3.1/gems/activesupport-4.1.16/lib/active_support/time_with_zone.rb:364:in `method_missing'
    from (irb):287
    from /Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/console.rb:90:in `start'
    from /Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/console.rb:9:in `start'
    from /Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/commands_tasks.rb:69:in `console'
    from /Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
    from /Users/Magne/.rvm/gems/ruby-2.3.1/gems/railties-4.1.16/lib/rails/commands.rb:17:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'
并在
时间内失败,因为它没有:

DateTime.instance_methods.include? :offset
#=> true

所以,一个DateTime对象变成一个TimeWithZone对象实际上只是被强制转换,而不是重新创建?这就解释了为什么DateTime类中预先存在的.offset方法仍然存在。那么,一个DateTime对象变成了一个TimeWithZone对象,实际上只是强制转换,而不是重新创建?这可以解释为什么DateTime类中预先存在的.offset方法仍然存在。。