2010-12-11 3 views
2

Je suis un développeur Java qui est très nouveau à Ruby alors si cette question est un peu trop basique, s'il vous plaît allez-y doucement sur moi. :) Je suis ici pour apprendre si quelqu'un peut me diriger dans la bonne direction. Je suis en train d'écrire une application qui traite des temps et devra prendre en compte les fuseaux horaires. J'étais curieux de savoir ce que Ruby propose pour gérer les fuseaux horaires et j'ai trouvé que Rails fournit une classe DateTime qui devrait faire ce dont j'ai besoin. Cependant, lorsque je crée un DateTime, il ne semble pas avoir les méthodes que j'attends. Quelqu'un peut-il expliquer ce qui se passe ici? Voici ce que je vois dans irb:Rails DateTime objet n'est pas ce que je m'attends

>> dt = DateTime.now 
NameError: uninitialized constant DateTime 
    from (irb):1 
>> require 'rails' 
=> true 
>> dt = DateTime.now 
=> #<DateTime: 212158799144191849/86400000000,-1/4,2299161> 
>> dt.respond_to? "in_time_zone" 
=> false 

Depuis DateTime ne définit pas jusqu'à ce que je requiers rails, je suppose que j'utilisais des rails DateTime mais il ne semble pas avoir les méthodes que je me attends basé sur la documentation.

Répondre

7

DateTime est une classe de noyau, et une partie de Date. Il est disponible si vous require 'date' dans votre code; Vous n'avez pas besoin d'utiliser Rails pour y accéder.

require 'date' 

asdf = DateTime.parse(`date`) 
asdf # => #<DateTime: 2010-12-10T21:41:59-07:00 (212158802519/86400,-7/24,2299161)> 
asdf.class # => DateTime 
asdf.to_s # => "2010-12-10T21:41:59-07:00" 

La classe que vous êtes après fait partie de ActiveSupport, qui fait partie de Rails, mais vous ne devez pas charger Rails pour y accéder:

require 'active_support/all' 
asdf.in_time_zone # => Fri, 10 Dec 2010 21:43:42 -0700 

ou

require 'active_support/core_ext' 
asdf.in_time_zone # => Fri, 10 Dec 2010 21:59:48 -0700 

La classe Time de Ruby a également un bon support pour les fuseaux horaires, donc vous pouvez aussi vouloir get familiar with it.

+0

C'est une bonne information pour un débutant comme moi. Bien que, je n'ai toujours pas la méthode in_time_zone mentionnée dans la documentation de Rails pour laquelle j'ai fourni le lien. J'ai l'impression que Rails a une classe DateTime améliorée (ou peut-être améliore simplement la classe existante) avec un meilleur support pour gérer les fuseaux horaires. Ai-je tort? – spaaarky21

+0

Rails améliore les classes standard. J'utilise le temps quand j'ai besoin de jouer avec les fuseaux horaires et les décalages. –

+0

Alors, à quel moment Rails apporte-t-il ces améliorations? Même si j'utilisais Time, j'aurais le même problème - la classe de temps de Ruby est assez minimale quand il s'agit de gérer les fuseaux horaires et j'aurais besoin des améliorations de Rails. – spaaarky21

0

Vous n'avez pas besoin d'une pile Rails complète pour la prise en charge du fuseau horaire. Vous pouvez installer et utiliser simplement active_support. Mais vous pouvez aussi vérifier tzinfo gem.

+0

Je commence à me demander ce qui se passe ici. J'ai essayé d'exiger active_support et il semble avoir fonctionné (require "active_support" a renvoyé la valeur true) mais DateTime.now n'a toujours pas les méthodes supplémentaires comme in_time_zone. – spaaarky21

Questions connexes