2010-10-30 28 views

Trả lời

153

Tôi nghĩ bạn đang cố lừa chúng tôi.

Ngày đầu vào cho câu hỏi của bạn là 25 Tháng 10 2010, trong khi đầu ra là tháng Mười, 2010. Vâng chơi!

Tiếp tục trên chuỗi chọn nit này: thời gian của bạn cũng hoàn toàn khác và bạn thiếu số giây từ thời gian đầu ra.

Bây giờ là câu trả lời đúng.

Mặc dù có một chút thực tế: đầu ra ISO 8601 trong Ruby tương tự như đầu ra "Ngày kết hợp và thời gian" từ ISO 8601's Wikipedia page.

Bạn có chuỗi và vì vậy, bạn sẽ cần chuyển đổi chuỗi thành đối tượng Time mà bạn có thể thực hiện với to_time. Sau đó, nó chỉ đơn giản là vấn đề gọi iso8601 trên đối tượng đó để có được phiên bản ISO 8601:

"2010-10-25 23:48:46 UTC".to_time.iso8601 

Phương pháp to_time là biếu không của Rails, trong khi iso8601 được courtest của thư viện chuẩn của Ruby.

+5

Câu trả lời hay, nhưng tôi không có một phần (được cho là hài hước?) –

+3

Chết tiệt! bạn đã thấy qua cốt truyện của tôi để lừa bạn. = P Cảm ơn câu trả lời tuyệt vời, tôi tự hỏi tại sao họ không chỉ viết rằng trong tài liệu! –

+7

@Mark Thomas: vâng, nó được cho là hài hước. Ông đã đưa ra một đầu vào và một thời gian đầu ra mà sẽ không phù hợp, bao giờ hết. Tricksie ít hobbit! –

2

Lưu ý: bạn phải chuyển đổi (phân tích cú pháp) chuỗi thời gian thành đối tượng thời gian trước khi bạn có thể áp dụng phương thức to_time.

ruby-1.9.2-p180 :016 > "2010-10-25 23:48:46 UTC".to_time.iso8601 
NoMethodError: undefined method `to_time' for "2010-10-25 23:48:46 UTC":String 
    from (irb):16 

thủ tục đúng:

irb> ut = DateTime.parse("2010-10-25 23:48:46 UTC") 

irb> ut.iso8601 
=> "2010-10-25T23:48:46+00:00" 
17

Sau khi thử nghiệm nhiều, tôi tìm thấy thư viện của Time phân tích cú pháp là tốt hơn so với DateTime, mặc dù những lý do thoát khỏi tôi vào lúc này. Với thông báo trước đó, tôi luôn sử dụng Thời gian thay vì Ngày giờ cho loại nội dung này và tài liệu về ruby ​​cũng khó hiểu để giải thích tại sao điều này là như vậy,

require 'time' 
puts Time.parse("2010-10-25 23:48:46 UTC").iso8601 
"2010-10-25T23:48:46Z" 
+2

giải pháp ruby ​​tinh khiết tốt. Chỉ muốn thêm, nếu thời gian ban đầu không phải là UTC, bạn có thể muốn điều này: 'Time.parse (" ... "). Utc.iso8601', otherwize bạn sẽ nhận được thời gian hậu tố với '+03: 00' hoặc một số giá trị khác tùy thuộc vào chuỗi thời gian ban đầu của múi giờ được đưa ra. Ý tôi là thay vì 'Z'. – akostadinov

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