2010-02-04 20 views
69

ho bisogno di analizzare seguente stringa in un oggetto DateTime:
30/Nov/2009:16:29:30 +0100convertire la stringa di DateTime

C'è un modo semplice per fare questo?

PS: Voglio convertire la stringa sopra come è. Il colon dopo l'anno non è un errore di battitura. Voglio anche risolvere il problema con Ruby e non con RoR.

+0

è il colon tra l'anno e ora un errore di battitura? –

+0

no, non è un errore di battitura – SkaveRat

risposta

82

DateTime.strptime consente di specificare il formato e convertire una stringa in un DateTime.

+1

grazie. Perso, potevo dargli il mio formato personale. Ecco il lavoro: '% d /% b /% Y:% H:% M:% S' – SkaveRat

+1

@SkaveRat La stringa rispetta il fuso orario? Io uso '% d /% b /% Y:% H:% M:% S% Z' – knut

+4

Per un elenco delle abbreviazioni di formato disponibili https://gist.github.com/halloffame/5350249 – Ryan

5

in Ruby 1.8, il modulo ParseDate convertirà questo e molti altri formati di data/ora. Tuttavia, non tratta con grazia il colon tra l'anno e l'ora. Supponendo che due punti sia un refuso e che sia effettivamente uno spazio, quindi:

#!/usr/bin/ruby1.8 

require 'parsedate' 

s = "30/Nov/2009 16:29:30 +0100" 
p Time.mktime(*ParseDate.parsedate(s)) # => Mon Nov 30 16:29:30 -0700 2009 
66

Non dovrebbe funzionare anche questo?

"30/Nov/2009 16:29:30 +0100".to_datetime 
+4

Non funziona, l'ho appena provato – Jacob

+0

Continua per me su mri ruby ​​1.9.2, probabilmente avrei dovuto dirlo quando ho postato lo snippet. – xentek

+1

funziona bene in Rails 3.2.3 utilizzando Ruby 1.9.3 ... "2012-05-16 02:30 UTC" .to_datetime => Mer, 16 maggio 2012 02:30:00 +0000 – Tilo

7

Questo convertirà la stringa in data datetime: successo

"05/05/2012".to_time 
+14

Questo è un metodo Ruby on Rails, non un metodo Ruby. – JackCA

+0

Anche se questa non era la risposta a questa domanda, mi ha aiutato un sacco. Grazie @ user1425976 – karlingen

30

che ho avuto con:

require 'time' 
t = Time.parse(some_string) 
+0

Ottima risposta! :) –

12

ho usato Time.parse("02/07/1988"), come alcuni degli altri manifesti.

Un trucchetto interessante era che Time era caricato per impostazione predefinita quando ho aperto IRB, ma Time.parse non è stato definito. Ho dovuto require 'time' per farlo funzionare.

Questo è con Ruby 2.2.

4

Per gli sviluppatori Rails cinese:

DateTime.strptime('2012-12-09 00:01:36', '%Y-%m-%d %H:%M:%S') 
=> Sun, 09 Dec 2012 00:01:36 +0000 
Problemi correlati