2015-05-28 2 views
1

Я пытаюсь разобрать некоторые даты с плохим форматированием в Ruby. Я решил откинуть часть метода на наличие am или pm, поэтому я разделил там строку.Синхронизация дат в Ruby

def bad_date(date) 
    if date.match(/m\d/i) 
    date_time = date.split('m', 2).reverse 
    time = date_time.include?('m') 
    date = date_time - time 
    else 
    date 
    end 
end 

Он развалился в нужном месте и в обратном массив это все хорошо, но это занимает m с ним. Как я могу его заменить? Или как я могу избежать этого полностью?

По существу я пытаюсь преобразовать некоторые даты, как это:

dates 
=> ["0900am06/13/2015", "0900 am06/13/2015", "0900am 06/13/2015", "0900 am 06/13/2015"] 

В это:

2015-06-13 09:00 AM 

с приемлемой погрешностью.

+1

[Это SO ответ] (http://stackoverflow.com/questions/6957858/split-string-in-list-but-keep-the-split-pattern) имеет решение для сохранения разделителя при разбиении строки. Он может быть перенастроен для сохранения 'm'. Надеюсь, поможет! – Zoran

ответ

3

Вы можете взять помощь strptime и strftime методов как:

require 'date' 

d = Date.strptime("0900am06/13/2015", "%H%M%p%m/%d/%Y") 
# => #<Date: 2015-06-13 ((2457187j,0s,0n),+0s,2299161j)> 
d.strftime("%Y-%m-%d %H:%M %P") 
# => "2015-06-13 00:00 am" 
d.strftime("%Y-%m-%d %H:%M %p") 
# => "2015-06-13 00:00 AM" 

Вот метод:

require 'date' 

def bad_date(date) 
    DateTime.strptime(date.tr(" ",''), "%H%M%p%m/%d/%Y").strftime("%Y-%m-%d %H:%M %p") 
end 

dates = ["0900am06/13/2015", "0900 am06/13/2015", "0900am 06/13/2015"] 
dates.map { |d| bad_date d } 
# => ["2015-06-13 09:00 AM", "2015-06-13 09:00 AM", "2015-06-13 09:00 AM"] 
+0

«0900 am06/13/2015» эта дата не будет работать –

+0

@ user123 Все еще возможна одна минута ... работая над ней .. –

+1

d = Date.strptime («0900am06/13/2015» .gsub (/ /, ''), "% H% M% p% m /% d /% Y") –

2
2.1.0 :085 > date = "0900am 06/13/2015" 
=> "0900am 06/13/2015" 
2.1.0 :086 > date.gsub!(" ","") 
=> "0900am06/13/2015" 
2.1.0 :087 > Date.strptime(date, "%H%M%p%m/%d/%Y") 
=> Sat, 13 Jun 2015 
Смежные вопросы