Muszę przeanalizować następujący ciąg do obiektu DateTime:
30/Nov/2009:16:29:30 +0100
Czy jest na to łatwy sposób?
PS: Chcę przekonwertować powyższy ciąg tak, jak jest. Dwukropek po roku nie jest literówką. Chcę też rozwiązać problem za pomocą Rubiego, a nie RoR.
%d/%b/%Y:%H:%M:%S %Z
%Y
dopasuje zarówno2015
(zgodnie z oczekiwaniami), jak i2016-foo-bar
ponieważ zatrzymuje się, gdy zobaczy2016
. To zachowanie jest zgodne z odpowiednikiem C; jednak funkcja C zwraca pozycję końca dopasowania (np. pierwszą-
w przypadku „2016”), abyśmy mogli zdecydować, czy dopasowanie jest dokładne; w Rubim zwraca aDateTime
, więc nie możemy powiedzieć, czy coś jest dalej.Czy to też nie powinno działać?
źródło
require 'active_support/all'
a potem"30/Nov/2009 16:29:30 +0100".to_datetime
(właściwie nie potrzebujesz wszystkich rozszerzeń active_support, ale powodzenia w ustalaniu, które z nich wymagają selektywnie)to_datetime
dodanym doString
obiektów:require 'active_support/core_ext/string/conversions'
Odniosłem sukces z:
źródło
Użyłem
Time.parse("02/07/1988")
, podobnie jak niektórych innych plakatów.Ciekawym rozwiązaniem było to, że
Time
zostało załadowane domyślnie, kiedy otworzyłem IRB, aleTime.parse
nie zostało zdefiniowane. Musiałem,require 'time'
żeby to zadziałało.Tak jest w przypadku Rubiego 2.2.
źródło
Spowoduje to przekonwertowanie ciągu w date na datetime:
źródło
Dla chińskich programistów Rails:
źródło
w Ruby 1.8 moduł ParseDate skonwertuje ten i wiele innych formatów daty / czasu. Jednak nie radzi sobie w pełni z okrężnicą między rokiem a godziną. Zakładając, że dwukropek jest literówką i faktycznie jest spacją, to:
źródło
Możesz również przeanalizować ciąg daty i czasu z podaną strefą czasową:
źródło