2011-11-17 9 views
13

Ho questo codice che converte una matrice di stringhe di date da un formato di 17-Nov-2011 a 11/17/11 :Convertire un formato di data stringa da "17-Nov-2011" a "11/17/11"

def date_convert dates 
    months = { 'Jan' => 1, 'Feb' => 2, 'Mar' => 3, 'Apr' => 4, 
      'May' => 5, 'Jun' => 6, 'Jul' => 7, 'Aug' => 8, 
      'Sep' => 9, 'Oct' => 10, 'Nov' => 11, 'Dec' => 12 } 
    new_dates = [] 
    dates.each do |date| 
    date_split = date.split('-') 
    month = months[date_split[1]] 
    day = date_split[0] 
    year = date_split[2][-2, 2] 
    new_dates.push ("#{month}/#{day}/#{year}") 
    end 
    new_dates 
end 

esiste un modo migliore, possibilmente integrato, per rendere questa conversione con Ruby? Sto imparando Ruby quindi qualsiasi altro approccio a questo sarebbe molto apprezzato.

+2

di Ruby [ 'date'] (http: // www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/index.html) e ['Time'] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc /time/rdoc/index.html) le librerie sono molto complete. Entrambi meritano di prendersi il tempo per sapere cosa possono fare; La data gestisce intervalli maggiori di Tempo. –

+1

Per i casi in cui 'parse' fallisce o si confonde, si dovrebbe esplicitamente guardare [' DateTime.strptime'] (http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html # method-c-strptime) – Phrogz

+0

nota: array vuoto + ciascuno + push = mappa – tokland

risposta

20

Utilizzare le funzioni integrate Time.parse e Time#strftime.

require 'time' 
time = Time.parse("17-Nov-2011") 
time.strftime("%m/%d/%y") 
# => "11/17/11" 
+4

Vorrei concatenare '.strftime()' al parsing, ma questa è una piccola differenza. –

+0

utilizzando Time.parse ... restituito: metodo non definito 'parse 'per Tempo: Class (NoMethodError)? –

+3

Hai richiesto "tempo"? –

4

Ruby ha una serie piuttosto robusto di funzioni di data e ora, controlla la classe Date.

Date.parse("17-Nov-2011").strftime('%m/%d/%y') 
9

Con Date#strftime è possibile formattare una data. Date.strptime consente un'azione "inversa": crea una data da una stringa.

Quando si combinano entrambi, si ottiene il risultato:

puts Date.strptime('17-Nov-2011', '%d-%b-%Y').strftime('%m/%d/%y') 

Ogni % -Parametri è una parte della stringa data. Hai bisogno di:

Per parsing della stringa data:

  • % d: numero del giorno (17)
  • % b: mese, con tre lettere (Nov)
  • % Y: Anno con 4 cifre (2011)

Per creare la stringa:

  • % m: Mese (11)
  • % d: numero del giorno (17)
  • % y: anno con 2 cifre (11)
+0

Sapevo che Ruby poteva indovinare come analizzare una stringa di date, ma non sapevo che potevi dirgli il formato, che è esattamente quello che dovevo fare. Grazie! –

Problemi correlati