2012-01-18 21 views
6

Tôi muốn kiểm tra định dạng iso8601 cho ngày được nhập bằng ruby, như start_date = "2011/05/05" phải khớp đối với định dạng 2011-05-05T00: 00: 00-04: 00 và lỗi được trả về tương ứng. Chúng ta có nên sử dụng regex ở đây hay bất kỳ phương pháp nào có mặt cho điều này?Cách khớp với định dạng múi giờ YYYY-MM-DDThh: mm: ssTZD trong ruby ​​

+0

giải thích ... Nếu tôi cung cấp văn bản = "2011-02-30T00: 00: 00" được phân tích cú pháp = Time.iso8601 (văn bản) cho => Thứ tư ngày 02 tháng 2 00:00:00 +0000 2011, điều chỉnh ngày, chúng ta có thể tránh điều này và ném lỗi. Tôi sẽ đi để xác nhận tùy chỉnh hoặc nó có sẵn., cũng Time.iso8601 (văn bản) treo ứng dụng khi ngày không hợp lệ được cung cấp, chúng ta có thể chỉ trả lại boolean sau khi kết hợp ... – Bijendra

Trả lời

8

Âm thanh như bạn muốn Time.iso8601:

require 'time' 
iso = Time.iso8601(start_date) 

Xem this blog post để biết thêm thông tin.

EDIT: Đây là một chương trình thử nghiệm ngắn nhưng đầy đủ mà hoạt động:

require 'time' 
text = "2011-05-05T00:00:00-04:00" 
parsed = Time.iso8601(text) 
puts parsed 

Output:

Thu May 05 04:00:00 UTC 2011 
+0

'Time.iso8601 'không lấy một chuỗi làm đối số (phải là một đối tượng ngày tháng hoặc thời gian). – steenslag

+0

@steenslag: Có chứ ... chỉnh sửa để bao gồm chương trình thử nghiệm. –

+0

Bạn đang phải ... – steenslag

3

Đối với xác nhận regex (với micro tùy chọn và múi giờ) sử dụng:

^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?$ 

Kiểm tra trên: http://rubular.com/r/qFFrhzvdsS

Không được đề xuất trong tập lệnh khi các vấn đề về hiệu suất!

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