2012-07-23 73 views
21

Tôi có một chuỗi 20120119 đại diện cho một ngày theo định dạng 'YYYYMMDD'.Chuỗi phân tích ngày tháng trong Ruby

Tôi muốn phân tích cú pháp chuỗi này thành đối tượng Ruby đại diện cho Ngày để tôi có thể thực hiện một số phép tính ngày cơ bản, chẳng hạn như khác với ngày hôm nay.

Tôi đang sử dụng phiên bản 1.8.6 (yêu cầu).

Trả lời

56

Bạn có thể sử dụng Date.strptime phương pháp được cung cấp trong thư viện chuẩn của Ruby:

require 'date' 
string = "20120723" 
date = Date.strptime(string,"%Y%m%d") 

Cách khác, như đề xuất trong các ý kiến, bạn có thể sử dụng Date.parse, vì chẩn đoán hoạt động chính xác trong trường hợp này:

require 'date' 
string = "20120723" 
date = Date.parse(string) 

Cả hai sẽ tăng ArgumentError nếu ngày không hợp lệ:

require 'date' 
Date.strptime('2012-March', '%Y-%m') 
#=> ArgumentError: invalid date 

Date.parse('2012-Foo') # Note that '2012-March' would actually work here 
#=> ArgumentError: invalid date 

Nếu bạn cũng muốn đại diện cho giờ, phút, v.v., bạn nên xem DateTime. DateTime cũng cung cấp phương thức parse hoạt động giống như phương pháp phân tích cú pháp trên Date. Điều tương tự cũng xảy ra với strptime.

+1

Date.parse cũng hoạt động cho YYYYMMDD. Không cần chuỗi định dạng. – rrhartjr

+1

Làm cách nào để phân tích cú pháp ngoại lệ? – chrisapotek

+0

Có cách nào để phát hiện xem một chuỗi sẽ ném ngoại lệ phân tích cú pháp không? – theUtherSide

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