2010-09-13 16 views
1

Il semble étrange que "2010--9-12 3:12 pm" est un point faible de Chronic Rubygem? Y a-t-il un moyen de le faire fonctionner? (Ou un autre bijou qui peut le faire?) Je l'espère aussi trouver un analyseur qui peut gérer 2010-09-12 3:12pm UTC ou d'autres fuseaux horaires tels que PDT, ou UTC+8 ou -0700Rubygems Chronic ne peut pas analyser "2010-09-12 3:12 pm" mais peut analyser "2010-09-12 3pm" ou "lundi dernier 3:12 pm"?

irb(main):001:0> RUBY_VERSION 
=> "1.8.7" 

irb(main):002:0> require 'rubygems' 
=> true 
irb(main):003:0> require 'chronic' 
=> true 

irb(main):004:0> Chronic.parse('9/12/2010') 
=> Sun Sep 12 12:00:00 -0700 2010 

irb(main):005:0> Chronic.parse('9/12/2010 3pm') 
=> Sun Sep 12 15:00:00 -0700 2010 

irb(main):006:0> Chronic.parse('9/12/2010 3:12pm') # <-- cannot work 
=> nil 

irb(main):007:0> Chronic.parse('last monday 3:12pm') 
=> Mon Sep 06 15:12:00 -0700 2010 

irb(main):008:0> Chronic.parse('2010-09-12') 
=> Sun Sep 12 12:00:00 -0700 2010 

irb(main):009:0> Chronic.parse('2010-09-12 3:12pm') # <-- cannot work 
=> nil 

Répondre

1

Il travaille pour moi en utilisant les dernières Chronic sur Github sur Ruby 1.8.7 (2009-06-12 patchlevel 174):

>> RUBY_VERSION 
=> "1.8.7" 

>> require './chronic/lib/chronic' 
=> true 

>> Chronic.parse('9/12/2010 3:12pm') 
=> Sun Sep 12 15:12:00 +0100 2010 

>> Chronic.parse('2010-09-12 3:12pm') 
=> Sun Sep 12 15:12:00 +0100 2010 

Dans la suite de tests il existe des tests pour:

time = parse_now("2006-08-20 7pm") 
assert_equal Time.local(2006, 8, 20, 19), time 

time = parse_now("2006-08-20 03:00") 
assert_equal Time.local(2006, 8, 20, 3), time 

Mais ne correspond pas exactement à la date de votre problème (s). Donc, si vous avez découvert un bug, il peut être utile de le dire à l'auteur de Chronic afin qu'il puisse mettre à jour les tests.

BTW ... qu'est-ce que vous obtenez lorsque vous essayez:

require 'time' 

puts Time.parse('2010-09-12 3:12pm') 

Parce que je reçois le bon: Sun Sep 12 15:12:00 +0100 2010 (. NB Je suis en jour le temps d'économie de lumière ici). Je mentionne cela parce que j'ai vu un tweet ambigu ce matin sur problème avec time API in a minor point release.

/I3az/

+0

Je ne pouvais pas utiliser Time.parse parce que le besoin le format suivant: (il traite le 12 comme mois) 'Time.parse ('09/12/2010 15:12 PDT)' => '2010-12-09 14:12:00 -0800' –

+0

Quand je fais' Time.parse ('09/12/2010 3:12 pm PDT ') 'Je reçois' Sun Sep 12 23:12:00 +0100 2010' qui est l'heure correctement convertie à mes paramètres régionaux (GMT + 1). Cependant je suis un peu surpris qu'il fasse MM/DD et non DD/MM dans mon locale! – draegtun