Преобразовать строковый формат даты из «17 ноября 2011» в «17.11.11» - PullRequest
13 голосов
/ 17 ноября 2011

У меня есть этот код, который преобразует массив строк дат из формата 17 ноября 2011 года в 17.11.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

Есть ли лучший, возможно, встроенный способсделать это преобразование с Ruby?Я изучаю Ruby, поэтому любой другой подход к этому был бы очень признателен.

Ответы [ 3 ]

20 голосов
/ 17 ноября 2011

Используйте встроенные функции Time.parse и Time#strftime.

require 'time'
time = Time.parse("17-Nov-2011")
time.strftime("%m/%d/%y")
# => "11/17/11"
10 голосов
/ 17 ноября 2011

С помощью Date#strftime вы можете отформатировать дату.Date.strptime позволяет выполнить «обратное» действие: построить дату из строки.

Когда вы объедините оба, вы получите свой результат:

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

Каждый % -Параметрычасть строки даты.Вам нужно:

Для разбора строки даты:

  • % d: номер дня (17)
  • % b: месяц с тремя буквами (ноябрь)
  • % Y: год с 4 цифрами (2011)

Для создания строки:

  • % m: Месяц (11)
  • % d: номер дня (17)
  • % y: год с 2 цифрами (11)
4 голосов
/ 17 ноября 2011

Ruby имеет довольно надежный набор функций даты и времени, посмотрите класс Date .

Date.parse("17-Nov-2011").strftime('%m/%d/%y')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...