2011-11-17 59 views
13

Tôi có mã này chuyển đổi một chuỗi các chuỗi ngày theo định dạng từ ngày 17 tháng 11 năm 2011 đến ngày 17 tháng 11 năm 2011 :Chuyển đổi định dạng ngày chuỗi từ "17 tháng 11 năm 2011" thành "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 

Có cách nào tốt hơn, có thể tích hợp để thực hiện chuyển đổi này với Ruby không? Tôi đang học Ruby nên mọi cách tiếp cận khác sẽ được đánh giá cao.

+2

Ruby [ 'Date'] (http: // www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/index.html) và ['Time'] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc /time/rdoc/index.html) thư viện rất đầy đủ tính năng. Cả hai đều xứng đáng dành thời gian để biết họ có thể làm gì; Ngày xử lý các phạm vi lớn hơn Thời gian. –

+1

Đối với những lần khi 'phân tích cú pháp' thất bại hoặc bị nhầm lẫn, bạn nên xem xét một cách rõ ràng [' DateTime.strptime'] (http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html # method-c-strptime) – Phrogz

+0

lưu ý: mảng trống + mỗi + push = map – tokland

Trả lời

20

Sử dụng chức năng được xây dựng trong các chức năng Time.parseTime#strftime.

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

Tôi muốn chuỗi '.ndftime()' thành phân tích cú pháp, nhưng đó là sự khác biệt nhỏ. –

+0

sử dụng Time.parse ... trả về: phương thức undefined 'parse 'cho Time: Class (NoMethodError)? –

+3

Bạn có yêu cầu 'thời gian' không? –

4

Ruby có bộ chức năng ngày và giờ khá mạnh, hãy xem lớp Date.

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

Với Date#strftime bạn có thể định dạng ngày. Date.strptime cho phép bạn thực hiện hành động 'đảo ngược': Tạo ngày từ chuỗi.

Khi bạn kết hợp cả hai, bạn sẽ có được kết quả của bạn:

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

Mỗi % -Parameters là một phần của chuỗi ngày. Bạn cần:

Đối với phân tích chuỗi ngày:

  • % d: số ngày (17)
  • % b: Tháng với ba chữ (Nov)
  • % Y: Năm với 4 chữ số (2011)

Đối với việc tạo ra các chuỗi:

  • % m: Tháng (11)
  • % d: số ngày (17)
  • % y: Năm với 2 chữ số (11)
+0

Tôi biết Ruby có thể đoán cách phân tích chuỗi ngày tháng, nhưng tôi không biết bạn có thể cho biết định dạng đó, đó chính là điều tôi cần làm. Cảm ơn! –

Các vấn đề liên quan