Preciso analisar a seguinte string em um objeto DateTime:
30/Nov/2009:16:29:30 +0100
Existe uma maneira fácil de fazer isso?
PS: Quero converter a string acima como está. Os dois pontos após o ano não são um erro de digitação. Também quero resolver o problema com Ruby e não com RoR.
%d/%b/%Y:%H:%M:%S %Z
%Y
irá corresponder a ambos2015
(como esperado) e2016-foo-bar
já que para quando vê2016
. Esse comportamento é consistente com a contraparte C; no entanto, a função C retorna a posição do final da correspondência (por exemplo, a primeira-
no caso "2016") para decidirmos se a correspondência é exata; em Ruby ele retorna umDateTime
, então não podemos dizer se ainda há algo depois.Isso também não deveria funcionar?
fonte
require 'active_support/all'
e então"30/Nov/2009 16:29:30 +0100".to_datetime
(você não precisa de todas as extensões active_support, mas boa sorte para descobrir quais requerer seletivamente)to_datetime
adicionado aosString
objetos:require 'active_support/core_ext/string/conversions'
Tive sucesso com:
fonte
Usei
Time.parse("02/07/1988")
, como alguns dos outros pôsteres.Uma pegadinha interessante foi que
Time
foi carregado por padrão quando abri o IRB, masTime.parse
não foi definido. Eu tinharequire 'time'
que fazer funcionar.Isso é com Ruby 2.2.
fonte
Isso converterá a string de data em data e hora:
fonte
Para desenvolvedores Rails chineses:
fonte
no Ruby 1.8, o módulo ParseDate converterá este e muitos outros formatos de data / hora. No entanto, não lida bem com os dois pontos entre o ano e a hora. Supondo que dois pontos seja um erro de digitação e, na verdade, um espaço, então:
fonte
Você também pode analisar uma string de data e hora com um determinado fuso horário:
fonte