2013-07-10 13 views
23

ho un appuntamento (che in realtà analizzata da un PDF) e potrebbe essere uno dei seguenti formati:analizzare una data in rotaie

MM/DD/YYYY 
MM/DD/YY 
M/D/YY 
October 15, 2007 
Oct 15, 2007 

C'è un gioiello o una funzione disponibile in rotaie o rubino a analizzare la mia data? O ho bisogno di analizzarlo usando regex?

BTW Sto usando il rubino su rotaie 3.2.

risposta

56

Si può provare Date.parse(date_string).

Si potrebbe anche usare Date#strptime se avete bisogno di un formato specifico:

> Date.strptime("10/15/2013", "%m/%d/%Y") 
=> Tue, 15 Oct 2013 

Per una soluzione generale:

format_str = "%m/%d/" + (date_str =~ /\d{4}/ ? "%Y" : "%y") 
date = Date.parse(date_str) rescue Date.strptime(date_str, format_str) 
+0

penso che non analizza formato americano (MM/DD/YYYY). –

+0

Non posso usare strptime perché non conosco il formato della mia data :( –

+0

Si può dedurre abbastanza facilmente, no? Se non verrà analizzato con 'Date.parse', quindi split ("/") .last sarà di 2 o 4 caratteri, per sapere se dovresti usare% y o% Y. –

5

trovo la gemma cronica molto facile da usare per il tempo di analisi e dovrebbe Lavoro per te. ho provato gli esempi che hai dato.

https://github.com/mojombo/chronic

+0

Sembra essere buono per gestire date complesse, c'è qualche opzione in cui posso specificare che le mie date in arrivo saranno nel formato MM/GG/AAAA e non nel formato GG/MM/AAAA? –

+0

questo dovrebbe essere il valore predefinito, ma puoi impostare l'endianness come questo 'endian_precedence:: little' e analizzerà GG/MM/AAAA – beanie

Problemi correlati