2010-02-04 39 views
69

tôi cần phải phân tích chuỗi sau đây vào một đối tượng DateTime:
30/Nov/2009:16:29:30 +0100chuyển đổi String để DateTime

Có một cách dễ dàng để làm được điều này?

PS: Tôi muốn chuyển đổi chuỗi ở trên. Đại tràng sau năm không phải là lỗi đánh máy. Tôi cũng muốn giải quyết vấn đề với Ruby chứ không phải RoR.

+0

là đại tràng giữa năm và giờ một lỗi đánh máy? –

+0

không, không phải lỗi đánh máy – SkaveRat

Trả lời

82

DateTime.strptime cho phép bạn chỉ định định dạng và chuyển đổi Chuỗi thành Ngày giờ.

+1

cảm ơn. Bị bỏ lỡ, rằng tôi có thể cho nó định dạng của riêng tôi. Đây là cách làm việc: '% d /% b /% Y:% H:% M:% S' – SkaveRat

+1

@SkaveRat Chuỗi của bạn có tôn trọng múi giờ không? Tôi sử dụng '% d /% b /% Y:% H:% M:% S% Z' – knut

+4

Để biết danh sách các từ viết tắt có sẵn theo định dạng https://gist.github.com/halloffame/5350249 – Ryan

5

trong Ruby 1.8, mô-đun ParseDate sẽ chuyển đổi định dạng này và nhiều định dạng ngày/giờ khác. Tuy nhiên, nó không đối phó một cách duyên dáng với dấu hai chấm giữa năm và giờ. Giả sử rằng dấu hai chấm là lỗi đánh máy và thực sự là một không gian, sau đó:

#!/usr/bin/ruby1.8 

require 'parsedate' 

s = "30/Nov/2009 16:29:30 +0100" 
p Time.mktime(*ParseDate.parsedate(s)) # => Mon Nov 30 16:29:30 -0700 2009 
66

Điều này cũng có tác dụng không?

"30/Nov/2009 16:29:30 +0100".to_datetime 
+4

Không hoạt động, tôi chỉ thử nó – Jacob

+0

Nó tiếp tục cho tôi trên ruby ​​mri 1.9.2, có lẽ nên có đề cập rằng khi tôi đăng đoạn. – xentek

+1

hoạt động tốt trong Rails 3.2.3 bằng Ruby 1.9.3 ... "2012-05-16 02:30 UTC" .to_datetime => Thứ tư, ngày 16 tháng 5 năm 2012 02:30:00 +0000 – Tilo

7

này sẽ chuyển đổi các chuỗi trong ngày để datetime: Thành công

"05/05/2012".to_time 
+14

Đây là phương thức Ruby on Rails, không phải là phương thức Ruby. – JackCA

+0

Mặc dù đây không phải là câu trả lời cho câu hỏi này, nó đã giúp tôi rất nhiều. Cảm ơn @ user1425976 – karlingen

30

tôi đã có với:

require 'time' 
t = Time.parse(some_string) 
+0

Câu trả lời hay! :) –

12

tôi đã sử dụng Time.parse("02/07/1988"), như một số trong những áp phích khác.

Một hình ảnh thú vị là Time được tải theo mặc định khi tôi mở IRB, nhưng Time.parse không được xác định. Tôi đã phải require 'time' để làm cho nó hoạt động.

Đó là với Ruby 2.2.

4

Đối với các nhà phát triển Rails Trung Quốc:

DateTime.strptime('2012-12-09 00:01:36', '%Y-%m-%d %H:%M:%S') 
=> Sun, 09 Dec 2012 00:01:36 +0000 
Các vấn đề liên quan