2010-08-30 35 views
52

Tôi đang gặp phải sự cố trong Ruby on Rails. Tôi đang tìm cách chuyển đổi một chuỗi định dạng Tue, 10 Aug 2010 01:20:19 -0400 (EDT) thành một đối tượng ngày tháng.Ruby String to Date Conversion

Có anyway tôi có thể làm điều này.

Dưới đây là những gì tôi đã xem xét và cố gắng tại sau không có may mắn:

  1. Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z")
  2. Chronic Parser
  3. Ruby: convert string to date
  4. Parsing date from text using Ruby

Xin hãy giúp tôi với điều này.

Trả lời

103

Có gì sai với phương thức Date.parse?

str = "Tue, 10 Aug 2010 01:20:19 -0400 (EDT)" 
date = Date.parse str 
=> #<Date: 4910837/2,0,2299161> 
puts date 
2010-08-10 

Có vẻ như nó hoạt động.

Vấn đề duy nhất ở đây là múi giờ. Nếu bạn muốn cập nhật theo múi giờ UTC, sau đó nó là tốt hơn để sử dụng Time đối tượng, giả sử chúng ta có chuỗi:

str = "Tue, 10 Aug 2010 01:20:19 +0400" 
puts Date.parse str 
2010-08-10 
puts Date.parse(Time.parse(str).utc.to_s) 
2010-08-09 

tôi không thể tìm thấy phương pháp đơn giản để chuyển đổi Time để Date.

+0

Cảm ơn Klew và Ryan. Điều này làm việc như một say mê. Tôi đã biết Date.parse, nhưng đã không sử dụng nó. Đây là một học tập cho tôi. – dkris

+1

Ruby 1.9 có Thời gian # to_date để chuyển đổi Ngày này sang ngày khác. – steenslag

12
Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z") 

nên là:

Date.strptime(updated, '%a, %d %b %Y %H:%M:%S %Z') 
5
str = "Tue, 10 Aug 2010 01:20:19 -0400 (EDT)" 
str.to_date 
=> Tue, 10 Aug 2010 
+1

đây là một điều Rails, không phải là một điều Ruby Tôi nghĩ rằng –

+0

yeah đường ray chỉ http://apidock.com/rails/String/to_date –

1

Bạn có thể thử https://rubygems.org/gems/dates_from_string: ngày

Tìm trong cấu trúc:

text = "get car from repair 2015-02-02 23:00:10" 
dates_from_string = DatesFromString.new 
dates_from_string.find_date(text) 

=> ["2015-02-02 23:00:10"]